Zielgruppe: Data-Science- und Design-Ops-Teams, die Diagramme als PNG in Decks, Notion oder CMS liefern — nicht nur als HTML. Der Streitpunkt ist wer Pixel, Alpha und Farbintent definiert. Dieser Artikel liefert eine Liefermatrix 2026 für Matplotlib und Plotly, kopierbare Exportparameter (dpi, figsize, transparent, MPLBACKEND, write_image mit Kaleido), eine kompakte sRGB-Abnahme und einen Stapelpfad auf Remote Mac M4 mit QA-Gates.
Inhalt
Interne Verlinkung
Ergänzende Design- und PNG-Leitfäden im deutschsprachigen Blog: sRGB vs. Display P3, ICC-Metadaten & verlustfreies Rekomprimieren, Design-PNG-Parameter-Workflow, 4K-PNG-Batch auf M4, PNG-QA-Batch. Startseite und Technik-Insights sind ohne Login erreichbar.
Typische Lieferrisiken
- Zoll mal dpi unklar: Ohne feste Kombination aus
figsizeunddpiweichen Pixelmaße vom Slide-Master ab;bbox_inches="tight"beschneidet Labels. - Plotly ohne fixe Box: Fehlende
width/heightund wechselndekaleido-Versionen ändern Kanten und Textlayout. - Farbintent: Weder Matplotlib noch Plotly ersetzen ein Farbmanagement-Runbook — sRGB muss dokumentiert und visuell geprüft werden.
Entscheidungsmatrix: Matplotlib vs. Plotly (PNG)
| Kriterium | Matplotlib | Plotly |
|---|---|---|
| Headless-Batch | Sehr gut — MPLBACKEND=Agg oder matplotlib.use("Agg") vor pyplot |
Sehr gut — Extra kaleido; fig.write_image("out.png") |
| Pixelmodell | Zoll × dpi auf savefig; Ausgabe mit sips -g pixelWidth messen |
Explizite width/height in px plus scale für Retina |
| Transparenz | transparent=True, facecolor="none"; Fringes auf #000 prüfen |
paper_bgcolor/plot_bgcolor rgba(0,0,0,0); Kaleido auf Platten testen |
| Typisches Risiko | Schriften, enge bbox, unterschiedliche Font-Caches zwischen Laptops | Kaleido-Drift, schwere WebGL-Spuren als große Raster-PNG |
Exportparameter (kopierbar)
Auf dem Remote Mac M4 immer denselben Shell-Benutzer wie LaunchAgent oder CI nutzen, damit Schrift-Caches stabil bleiben. Hinweis Plotly: Auf dem Figure-Objekt heißt der Rasterpfad write_image; format="png" setzen (oder Dateiendung .png) — das entspricht dem gängigen „PNG schreiben“-Schritt neben Browser-Export.
Matplotlib (Agg, dpi, transparent)
figsize[0] * dpi, sofern kein aggressives Tight-Cropping die Ränder frisst.
export MPLBACKEND=Agg
python3 <<'PY'
import matplotlib; matplotlib.use("Agg")
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 5.625), layout="constrained")
ax.plot([0, 1], [0, 1])
fig.savefig("out/m.png", dpi=300, transparent=True,
facecolor="none", edgecolor="none",
bbox_inches="tight", pad_inches=0.05)
PY
dpi: 144–300 für Präsentationen; 300+ wenn Druck-PDFs skalieren.figsize: Zoll als Vertrag — pro Markenleitfaden einedpi-Stufe dokumentieren.- Optional:
mplcairoprüfen, wenn Subpixel-Text kritisch ist.
Plotly (Kaleido, write_image)
import plotly.graph_objects as go
fig = go.Figure(data=go.Scatter(x=[0, 1], y=[0, 1]))
fig.update_layout(template="plotly_white",
paper_bgcolor="rgba(0,0,0,0)", plot_bgcolor="rgba(0,0,0,0)")
fig.write_image("out/p.png", format="png",
width=1920, height=1080, scale=2, engine="kaleido")
scale:1für echtes 1×-Web;2wenn Downstream doppelte Raster erwartet.- Versionen pinnen:
plotlyundkaleidoin Lockfile — Upgrades verschieben Bounds.
sRGB und minimale Abnahme
Beide Stacks liefern keine „ICC-Garantie“ ohne Ihre Pipeline. Für Web- und Deck-Lieferung sRGB dokumentieren und wie bei Figma-Exports gegen Platten halten; Details in den verlinkten PNG-Artikeln. Kurzmatrix:
| Check | Aktion | Pass |
|---|---|---|
| Intent | README: „Lieferung sRGB“ vs. „P3 nur intern“ | Ticket-Sprache = Design-PNG-Workflow |
| Hintergrund | PNG auf #FFFFFF und #0B0B0B in Safari und Chrome | Keine Überraschungs-Gamma-Sprünge |
| Alpha | 400 % Zoom an Legendenkanten | Keine grauen Fringes |
Remote Mac M4: Stapelpfad & Abnahme
Ordnerdisziplin (lokal auf SSD, nicht iCloud-Watch): ~/png_jobs/viz_export/inbox/ Roh-Exporte; work/ optional zusammensetzen; out/YYYY-MM-DD/ freigegeben inkl. Manifest; log/export.jsonl je Datei Tool, Version, dpi oder scale, sha256.
Fünf Umsetzschritte: (1) Backend und Versionen einfrieren. (2) Matrix-Parameter setzen und ein Golden-File erzeugen. (3) In inbox schreiben. (4) Gates unten ausführen. (5) Passende Dateien mit Manifest nach out/ verschieben.
| # | Gate | Tool |
|---|---|---|
| 1 | Breite/Höhe exakt laut Spec | sips -g pixelWidth -g pixelHeight oder Pillow size |
| 2 | Byte min/max gegen leere Render | stat -f%z auf macOS |
| 3 | Kein dpi-/scale-Drift | Manifest vs. Lockfile |
| 4 | Textspot in Preview und Zieldeck | 100 % Zoom |
| 5 | Deterministischer Re-Run | Gleicher Commit und Fonts → gleicher sha256 |
Zahlen & Fakten zum Mitnehmen: (A) Viele Decks erwarten 1920×1080 oder 3840×2160 — bei Plotly scale=2 explizit gegenrechnen. (B) dpi=300 mit 10 Zoll Breite liefert grob 3000 px — vor CMS-Upload prüfen. (C) JSONL-Zeilen pro PNG verkürzen Postmortems nach Kaleido-Updates.
Fazit & nächste Schritte
Matplotlib Agg + savefig und Plotly Kaleido + write_image liefern starke PNGs, wenn Backends und Versionen eingefroren sind und die Größe entweder als Zoll × dpi oder Px × scale eindeutig ist. Kombinieren Sie das mit sRGB-Platten, Alpha-Checks und dem out/-Baum auf einem gemieteten Remote Mac M4, damit nächtliche Diagramm-Batches nicht vom Laptop-Schlaf abhängen.
Öffentliche Einstiege ohne Login: MacPng-Startseite, Mieten & Kaufen, Preise, Hilfe inkl. SSH/VNC. Weitere Artikel im Technik-Insights-Blog.
Matplotlib- und Plotly-PNGs auf Remote Mac M4 stapeln
Kaleido- und Agg-Jobs auf dediziertem Apple Silicon ausführen, Schriften pinnen und nur manifestgeprüfte PNGs promoten — ideal für nächtliche Reports und große Dashboard-Snapshots.