Communitygithub.com

Nature-grade Figure Composer

Analysierte Ergebnisse (Diagramme, CSV/NPZ-Daten, Skripte, Notebooks) in mehrteilige Abbildungen, Tabellen und Captions auf Nature-Niveau zusammenfassen.

Was ist Nature-grade Figure Composer?

Dieses Skill verwandelt verstreute Analyseergebnisse in publikationsreife, mehrteilige Abbildungen, die den hohen Standards von Nature-Journalen entsprechen. Es arbeitet mit Python 3.9+, matplotlib, numpy, pandas und weiteren Bibliotheken. Der Workflow beginnt mit einer Inventarisierung der Ergebnisse, gefolgt von einer Benutzerabfrage zur Zielsetzung und einem Storyboard-Prozess, der die wissenschaftliche Erzählung (Was → Wie → Warum → Leistung → Auswirkung) strukturiert. Anschließend erstellt das Skill mit dem mitgelieferten Framework nfig.py Vektor-PDFs/SVGs in den Formaten 89 mm oder 183 mm Breite mit einheitlicher Schriftart (Arial 5–7 pt) und konsistentem Farbschema. Es integriert eine automatische Qualitätssicherung inklusive Farbsimulation für Farbenblindheit und einen manuellen Prüfschritt. Abschließend werden Captions, Tabellen und Supplementary-Informationen nach Nature-Vorlage formatiert. Das Skill ist für Claude Code, Cursor und Codex konzipiert und wird über die SKILL.md-Konfiguration aktiviert.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/0x6869726f6b69/claude-skills/tree/HEAD/skills/nature-figure-composer

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Nature-grade Figure Composer – Zusammenstellung von Abbildungen auf Nature-Niveau

Eine Abbildung ist nicht nur eine „Anzeige von Ergebnissen", sondern ein visuelles Beweismittel für eine wissenschaftliche Behauptung. Dieses Skill formt verstreute Analyseergebnisse in eine Geschichte um – „1 Abbildung = 1 Behauptung“ – und erstellt daraus Dateien, die den technischen Spezifikationen von Nature-Journalen entsprechen.

<SKILL_DIR> ist das Verzeichnis, in dem sich diese SKILL.md befindet. Erforderlich: Python 3.9+, matplotlib, numpy, pandas, Pillow, PyMuPDF (pip install pymupdf), scipy (für 95%-KI).

Mitgelieferte Ressourcen

PfadInhaltZeitpunkt zum Lesen
references/guidelines.mdBenutzerspezifische Zeichenrichtlinien (7 Prinzipien), Nature-Technikspezifikationen, finale ChecklisteVor der Planung lesen, bei QA erneut lesen
references/storyboard.mdZusammenfassung von Ergebnissen → Abbildung, Typen für Abbildung 1, Layout-Typen, Entwurfsschritte für den „Automatik“-ModusSchritt 3
references/charts.mdBehauptungstyp → Diagrammtyp, Unsicherheit/Achsen, Darstellung von Karten, Codebeispiele für nfigSchritt 3 (Typauswahl), 5
references/captions-tables.mdSchreibweisen und Beispiele für Captions, Tabellen und SupplementarySchritt 7
scripts/inventory.pyInventarisierung der Ergebnisdateien + nummeriertes KontaktblattSchritt 1
scripts/nfig.pyStil, feste Farbbedeutung, Panel-Label, Zeichenhilfen, automatische QASchritt 4–6
scripts/assemble.pyKombination vorhandener PDF/SVG/PNG als Vektorgrafiken zu mehreren PanelsWenn Paneele nicht neu gezeichnet werden können
scripts/check_figure.pySpezifikationsprüfung der fertigen Datei + FarbsimulationsbildSchritt 6
scripts/make_table.pyCSV → booktabs LaTeX / Markdown-TabelleSchritt 7
assets/figure_plan_template.mdVorlage für den AbbildungsplanSchritt 3
assets/style_template.pyVorlage für gemeinsame Konventionen (Anzeigenamen, Farbbereiche, Achsenbeschriftungen) für alle AbbildungenSchritt 4
assets/layout_example.jsonLayoutbeispiel für assemble.pyBei Verwendung von assemble

Arbeitsablauf

Schritt 1 — Inventarisierung der Ergebnisse (schnell vor der Frage)

python <SKILL_DIR>/scripts/inventory.py <project_root> --sheet paper_figures/_inventory --out paper_figures/_inventory/inventory.md
  • Lies die contact_sheet_*.png unter paper_figures/_inventory/ um zu verstehen, was jedes Ergebnis zeigt. Nutze die Spalten „made by / read by“ im Bericht, um von der Abbildung zum Skript und zu den Rohdaten zu gelangen (notwendig für die Neuerstellung).
  • Lies Manuskripte, READMEs oder Notizen, um die Forschungsfrage, die vorgeschlagene Methode und die Behauptungen zu verstehen.
  • Füge zu jedem Ergebnis einen einzeiligen Befund hinzu (z.B. #6 benchmark.csv → vorgeschlagene Methode erreicht auf allen 3 Datensätzen die höchste Genauigkeit, +6 Prozentpunkte). Dies dient als Grundlage für die Auswahl in Schritt 2 und die Planung in Schritt 3.
  • Falls keine Ergebnisse gefunden werden, frage in Schritt 2 gemeinsam nach dem Speicherort.

Schritt 2 — Befragung (nach dem Start des Skills obligatorisch)

Die Entscheidung über die Zusammenstellung liegt beim Benutzer. Frage daher vor dem Zeichnen nach. Frage jedoch keine Punkte erneut, die bereits in der Startnachricht geklärt wurden. Verwende ggf. AskUserQuestion, ansonsten gib nummerierte Fragen als Text aus und warte auf Antwort. Erstelle die Auswahlmöglichkeiten aus der Inventarisierung in Schritt 1 konkret (mit Dateinummer und Befund).

  1. Objekt (Pflicht) „Welche Ergebnisse sollen in einer Abbildung zusammengefasst werden?“
    • Automatik: Aus allen Ergebnissen wird die gesamte Figuren-Konfiguration (Fig. 1–N + SI) entworfen (empfohlen)
    • Ein oder zwei aus der Inventarisierung erstellte Kandidatengruppen (z.B. „Leistungsvergleich: #1 accuracy_bar, #6 benchmark.csv“)
    • Freitext (Other) mit Angabe wie „#1, #4, #6 in einer Abbildung“ möglich
  2. Behauptung „Was soll mit dieser Abbildung am wichtigsten vermittelt werden?“ – 1–2 geschätzte Behauptungen + Automatik
  3. Veröffentlichungsgröße – 2-spaltig 183 mm (empfohlen) / 1-spaltig 89 mm / 1,5-spaltig 120–136 mm / Automatik
  4. Ausgabe (Mehrfachauswahl) – Abbildung (PDF+SVG+PNG) / Caption (Englisch) / Tabelle / SI-Kandidatenliste

Behandlung der Antworten:

  • Ist das Objekt (F1) in der Startnachricht bereits angegeben, können die Standardwerte für F2–F4 verwendet werden (Behauptung geschätzt, 183 mm, Abbildung + Caption). Frage nur nach, wenn die Entscheidung unklar ist.
  • Bei „Automatik“ oder nicht angegebenen Punkten entscheidet Claude, welche Ergebnisse verwendet, wie sie angeordnet und wie sie zusammengefasst werden. Folge den „Entwurfsschritten für den Automatik-Modus“ in references/storyboard.md.
  • Wird gesagt „Mach weiter ohne zu fragen“, behandle alle Punkte als Automatik.
  • Text in der Abbildung und Caption sind standardmäßig Englisch (da die Veröffentlichung auf Englisch erfolgt). Die Unterhaltung erfolgt in der Sprache des Benutzers.

Schritt 3 — Abbildungsplan (Storyboard)

Lies vor dem Schreiben von Code references/storyboard.md und erstelle paper_figures/figure_plan.md im Format von assets/figure_plan_template.md. Enthalten sein müssen:

  • Gesamter Ablauf des Manuskripts (Was → Wie → Warum → Leistung → Auswirkung) und die Rolle jeder Abbildung
  • Für jede Abbildung: Ein-Satz-Behauptung (wird direkt zum Titel-Satz der Caption), Panel-Tabelle (Label/Inhalt/Diagrammtyp (aus references/charts.md §1 auswählen)/Datenquelle/Hero- oder Support-Status), Mosaik und Maße, Rolle der Farben
  • Ergebnisse, die aus dem Haupttext ausgeschlossen werden (SI) und der Grund dafür. Verstecke keine Grenzen oder Fehlschläge, sondern platziere sie im Grenz-Panel des Haupttextes oder in SI.
  • Fehlende Informationen (n, Definition der Fehlerbalken, Tests, Einheiten) als [AUTHOR TODO] auflisten

Zeige den Plan im Chat in einer kurzen Tabelle. Im Automatik-Modus oder wenn die Anordnung den Vorgaben des Benutzers entspricht, fahre ohne Bestätigung mit dem Zeichnen fort und füge hinzu: „Der Plan kann später geändert werden.“ Halte nur an, wenn die angegebenen Ergebnisse die Behauptung nicht stützen oder die Vorgaben widersprüchlich sind, und berate dich dann.

Schritt 4 — Gemeinsamen Stil festlegen

  • Kopiere nfig.py nach paper_figures/src/ (damit die Abbildungsskripte auch ohne das Skill erneut ausgeführt werden können).
  • Lege für das gesamte Manuskript in einer einzigen Datei paper_figures/figure_style.json fest: Methode/Bedingung → Farbe/Marker/Linientyp. Wenn die Bedeutung der Farben zwischen den Abbildungen wechselt, muss der Leser jedes Mal die Legende neu lesen. Verwende daher diese Datei für alle Abbildungen.
import style                      # paper_figures/src/style.py (Pfad unabhängig vom Ausführungsort)
pal = nfig.Palette.load_or_build(style.PALETTE,
        proposed=["Ours"], highlight=["SOTA-X"],
        baselines=["Base A", "Base B"], references=["Oracle"])
  • proposed = Akzentfarbe (gedämpftes Zinnoberrot), highlight = nur die stärkste Vergleichsmethode in Blau, andere Vergleichsmethoden = Graustufen + Marker/Linientyp, reference (theoretischer Wert, Obergrenze, Zufallsniveau) = schwarze gestrichelte Linie.
  • Bestehende Zuordnungen bleiben unverändert, neue Namen werden hinzugefügt. Verwende für andere Kategorien als Methoden (z.B. Datensätze) nicht dieselben Farben, sondern unterscheide durch Position, Panel-Aufteilung und Marker.
  • Fasse „Anzeigekonventionen“, die für alle Abbildungen gelten, an einem Ort in paper_figures/src/style.py (Kopie von assets/style_template.py) zusammen und importiere sie in jedes Abbildungsskript: Name aus den Daten → Anzeigename (z.B. "PISurr (ours)" → "PISurr"), Farbbereiche für Karten gleicher Größe (z.B. TEMP_LIM = (300, 345), ERR_LIM = (0, 6)), Achsenbeschriftungen mit Einheiten. Wenn dies für jede Abbildung einzeln geschrieben wird, weichen sie voneinander ab.

Schritt 5 — Zeichnung

Grundsätzlich mit nfig aus den Rohdaten neu zeichnen. Das Zusammenfügen vorhandener PNGs führt zu uneinheitlichen Schriftarten, Linienstärken und Farben, und durch die Verkleinerung werden Buchstaben schnell kleiner als 5 pt. Wähle den Diagrammtyp aus references/charts.md.

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))   # Funktioniert von jedem Ausführungsort
import nfig
nfig.use_style()                                          # Arial 7/6 pt, 0,5 pt Achsen, TrueType 42
fig, axd = nfig.figure("double", 120, mosaic="aab;cde")  # Zeichne in der endgültigen Veröffentlichungsgröße
# ... jede Panel (Rezepte aus charts.md) ...
nfig.shared_legend(fig, pal.handles(["Ours", "SOTA-X", "Base A"]))  # Eine Legende für die gesamte Abbildung
nfig.label_panels(fig, axd)          # Zuletzt aufrufen: a, b, c… 8 pt fett, ausgerichtet nach Zeilen/Spalten
nfig.save(fig, "paper_figures/fig2")       # .pdf/.svg/.png + Bericht der automatischen QA

label_panels legt das Layout endgültig (fixiert) fest. Füge daher Legenden, Anmerkungen und Farbbalken immer davor hinzu.

  • 1 Abbildung = 1 Skript (paper_figures/src/fig2.py). Stelle sicher, dass das Laden der Daten bis zum Speichern reproduzierbar ist.
  • Zeichne in der endgültigen Größe; verkleinere später nicht. Verwende bbox_inches="tight" nicht, da sich die Breite ändert.
  • Platziere das Hero-Panel am größten und entweder oben links oder in der obersten Reihe. Gleiche Diagrammtypen in Größe, Achsenbereich und Skalierung angleichen.
  • Für Abbildungen mit unterschiedlichen Panel-Typen pro Zeile (z.B. Band mit Schema / Spalte mit Bildern/Karten / Diagramme) verwende nicht ein einziges Mosaik, sondern nfig.figure("double", 120, rows=[("a", 0.8), ("bcdef", 1), ("g", 1)]), um die Panels zeilenweise anzuordnen. Bei einem einzigen Gitter wird der Rand für die Skalenbeschriftungen einer Spalte auch auf andere Zeilen derselben Spalte angewendet, was Bilder oder Karten quetscht. Bei gleichartigen Zeilen bleibt ein einziges Mosaik erhalten (die Spaltenenden sind ausgerichtet).
  • Für Felder wie Temperatur- oder Fehlerkarten verwende nfig.field (Farbbereich aus den gemeinsamen Werten in style.py) + nfig.colorbar, für gleiche Größen eine einzige Farbbalken. Fotos/Mikroskopiebilder mit nfig.image_panel.
  • Panels, die nicht neu gezeichnet werden können (Übersichtsdiagramme aus externen Tools, Mikroskopiebilder, nicht mehr vorhandene Daten):
    • Bei wenigen solcher Panels: Mit nfig.image_panel(ax, path) einbetten (wird Raster).
    • Sollen sie als Vektorgrafik zusammengefügt werden, verwende scripts/assemble.py, um mit nfig gezeichnete Panel-PDFs mit externen PDFs zu kombinieren (siehe assets/layout_example.json; Pfade relativ zur JSON). Zeichne die nfig-Panels in denselben Maßen (mm) wie die Zielzelle und halte den Skalierungsfaktor ≈1. Passe die Zellenverhältnisse und Höhen an, bis die Meldungen „text below 5 pt“, „below 300 dpi“ und „cell mostly empty“ verschwinden.
    • Teile dem Benutzer mit, warum eine Neuerstellung nicht möglich war und dass eine Nachbesserung mit den Rohdaten erfolgen kann.
  • Integrität der Daten: Werte nicht verändern, keine günstigen Teile selektieren, Balken von Null zeichnen, Achsen nicht stauchen, um Unterschiede zu übertreiben. Bilder nur mit einheitlichen Anpassungen und Zuschnitt bearbeiten (keine Teilbearbeitung, Compositing oder KI-Bildbearbeitung zulässig).

Schritt 6 — QA und Korrekturschleife (mindestens 2 Durchgänge)

  1. Automatische Prüfung: Zusätzlich zum Bericht von nfig.save ausführen: python <SKILL_DIR>/scripts/check_figure.py paper_figures/fig2.pdf. ERROR muss immer beseitigt werden; WARN darf nur bei Absicht bestehen bleiben, dann mit Begründung.
  2. Sichtprüfung: Lies paper_figures/qa/fig2_preview.png (in endgültiger Größe) und fig2_access.png (Protanopie/Deuteranopie, Graustufen) per Read und überprüfe die finale Checkliste aus references/guidelines.md. Insbesondere: Ist die Behauptung in 3 Sekunden verständlich? Ist das Hero am auffälligsten? Ist das Lesen von oben links nach unten rechts möglich? Überlappungen/Überstände von Text/Linien, fehlende Ausrichtung? Sinnlose Leerräume oder zu enge Anordnung? Sind die Unterscheidungen auch bei Farbenblindheit oder in Graustufen erkennbar?
  3. Korrigieren und neu generieren, dann erneut prüfen. Frage dich abschließend aus der Perspektive eines Gutachters: „Reichen diese Abbildung und Caption für die Behauptung aus?“

Schritt 7 — Caption, Tabelle und Lieferung

  • Schreibe die Caption im Format von references/captions-tables.md in paper_figures/captions.md (fett gedruckter Titelsatz = Behauptung → dann der Reihe nach jede Panel → Definition von Symbolen, Farben, Abkürzungen → n, Fehlerbalken, Tests).
  • Für genaue Zahlenvergleiche: Tabelle mit scripts/make_table.py (booktabs, keine vertikalen Linien, nur beste Werte fett). Lange Daten im Format „eine Zeile pro Seed“ können mit --groupby und --stat direkt zu Mittelwert ± s.d. und n aggregiert werden.
  • Benachrichtigung des Benutzers: Liste der erstellten Dateien, Behauptungen und Panel-Konfiguration jeder Abbildung, an SI verschobene Ergebnisse mit Begründung, [AUTHOR TODO] (unbestätigte statistische Informationen usw.), verbleibende WARN mit Begründung.

Standard-Ausgabeplatzierung (Standard)

Um eine Vermischung mit vorhandenen Dateien des Benutzers (z.B. figures/) und Überschreiben zu vermeiden, werden alle Ausgaben unter paper_figures/ zusammengefasst. Falls der Benutzer einen anderen Ort angibt, folge diesem.

paper_figures/
├── figure_plan.md  figure_style.json  captions.md
├── src/            nfig.py, fig1.py, fig2.py, ...
├── fig1.pdf .svg .png, fig2.*, ...
├── tables/         table1.tex, table1.md
├── qa/             *_preview.png, *_access.png
└── _inventory/     inventory.md, contact_sheet_*.png

Bei Unsicherheit

  • Entscheide, was gezeigt wird, danach, ob es als Beweis für die Behauptung dient. Ergebnisse, die keine Beweise liefern, wandern – egal wie aufwendig sie waren – in die SI.
  • Bei numerischen Verbesserungen immer ein konkretes Beispiel dafür geben, was sie tatsächlich bedeuten.
  • Zeige nicht nur die besten Ergebnisse, sondern auch Anwendungsbedingungen, Grenzen und Fehlschläge – das erhöht die Glaubwürdigkeit der Behauptung.
  • Bei Unsicherheit wähle die einfachere Variante: Weniger Farben, weniger Text (Erklärung in die Caption), Legenden teilen.

Verwandte Skills