2026 — Matrice livraison dataviz : Matplotlib et Plotly, export PNG (DPI, sRGB) et checklist batch Mac M4 distant

Présentations, boards investisseurs et rapports produit demandent encore des graphiques PNG nets compatibles PowerPoint, Notion et CMS. Le vrai sujet n’est pas « peut-on exporter ? », mais quelle pile porte la vérité des pixels, de l’alpha et de l’intention couleur. Ce guide propose une matrice décisionnelle 2026 pour Matplotlib et Plotly, des paramètres d’export exécutables (dpi, figsize, transparent, MPLBACKEND, write_image / Kaleido, pont Pillow), une lecture sRGB alignée design, et un chemin batch sur Mac mini M4 distant avec garde-fous d’acceptation réutilisables en shell ou LaunchAgent.

Sur cette page

① Matrice : Matplotlib vs Plotly pour la livraison PNG

Choisissez la bibliothèque selon votre modèle de gouvernance. Matplotlib convient aux équipes qui veulent un style déterministe, relu dans le code Python. Plotly s’intègre aux dashboards déjà modélisés en Figure et permet des instantanés PNG identiques au JSON métier sans dupliquer tous les jetons visuels.

Critère Matplotlib Plotly
Serveur / batch sans écran Très bonMPLBACKEND=Agg ou matplotlib.use("Agg") avant import pyplot Très bon — extra pip kaleido ; fig.write_image("out.png")
Modèle de taille figsize (pouces) × dpi sur savefig ⇒ pixels approximatifs ; bbox_inches="tight" peut rogner les marges slides width / height en px + scale (Retina)
Transparence transparent=True, facecolor / edgecolor ; contrôler franges anticrénelage sur fond sombre Fond transparent via paper_bgcolor / plot_bgcolor rgba(0,0,0,0) ; valider sur plaques #000 / #FFF
Statique vs interactif Statique d’abord ; proche logique « print » Même Figure pour Dash et PNG ; attention état caméra / hover si capture scriptée
Risque typique Polices manquantes, graisses de secours, légendes rognées par bbox serrée Dérive de version Kaleido, traces lourdes rasterisées

② Paramètres d’export exécutables (copier-coller)

Ces extraits ciblent macOS ou Linux worker ; sur un nœud Mac M4 loué, exécutez-les sous le même utilisateur que votre agent (launchd) pour garder les caches de polices stables.

Matplotlib — backend Agg, dpi, transparence

Règle : largeur finale ≈ figsize[0] * dpi sans recadrage agressif — remesurez avec sips -g pixelWidth ou Pillow après export.
# Shell : backend non interactif pour jobs batch
export MPLBACKEND=Agg

# Python
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10, 5.625), layout="constrained")  # toile ~16:9 en pouces
ax.plot([0, 1], [0, 1])

fig.savefig(
    "out/matplotlib_chart.png",
    dpi=300,
    transparent=True,
    facecolor="none",
    edgecolor="none",
    bbox_inches="tight",
    pad_inches=0.05,
)
  • dpi : 144–300 pour decks ; 300+ si le texte doit survivre à une réduction PDF.
  • figsize : traiter les pouces comme contrat — une paire figsize+dpi documentée par ligne directrice marque.
  • transparent + facecolor="none" : évite le voile blanc derrière les légendes.
  • Backend alternatif : mplcairo si le rendu sous-pixel du texte est critique ; valider toujours sur les lecteurs cibles.

Plotly — Kaleido et write_image

L’API figure utilise write_image pour le raster ; il n’y a pas de write_png dédié sur l’objet Figure — passez format="png" (ou un nom de fichier .png) pour forcer PNG. Équivalent bas niveau : plotly.io.to_image(fig, format="png", engine="kaleido") puis écriture bytes si votre orchestrateur impose un nom de fichier précis.

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/plotly_chart.png",
    format="png",
    width=1920,
    height=1080,
    scale=2,          # 1920×1080 logiques → fichier souvent 3840×2160 px selon moteur
    engine="kaleido",
)
  • width / height : cadres explicites pour gabarits slides (1920×1080, 3840×2160, etc.).
  • scale : 1 pour assets web 1x ; 2 Retina si l’aval attend le double raster.
  • engine="kaleido" : figer kaleido et plotly dans un lockfile — les upgrades ont déjà modifié les bornes raster.

Pillow — « write_png » côté composite final

Après fusion logos / tampons sur une sortie Matplotlib, utilisez Image.save(..., format="PNG", compress_level=6) après validation RGBA alpha droit. Pas besoin d’appeler directement PngImagePlugin : img.save("out.png") avec mode RGBA explicite suffit le plus souvent.

③ sRGB, ICC et alignement livraison

Ni Matplotlib ni Plotly n’embarquent automatiquement un « contrat ICC design » : il faut le définir en pipeline. Pour web et decks, standardisez le discours sur sRGB entre data science et ops design, puis vérifiez comme pour les exports Figma : plaques de prévisualisation, politique de profil, manifestes. Approfondissez avec la checklist PNG sRGB / Display P3 et l’article métadonnées ICC & recompression sans perte ; voici le minimum dataviz.

Contrôle Action Acceptation
Intention couleur documentée README « livraison sRGB » vs « P3 interne seulement » Ticket aligné sur les paramètres PNG design par lot
Fonds neutres Placer le PNG sur #FFFFFF et #0B0B0B (Safari + Chrome) Pas de surprise gamma ; grilles et textes dans Δ convenu avec les jetons hex
Graphiques transparents Zoom 400 % aux coins de légende Pas de frange grise ; bords alpha cohérents avec la référence vectorielle si applicable
ICC optionnel Si la marque impose l’embed, appliquer la politique exiftool / sips après QA pixels Tag profil conforme règle org sans décaler les pixels

④ Mac M4 distant : chemins batch et checklist d’acceptation

Déportez les longues rafales de graphiques sur un hôte Apple Silicon dédié pour éviter sommeil portable, jitter VPN et dérive de polices locales. Réutilisez la même discipline que pour les PNG marketing :

  • ~/png_jobs/viz_export/inbox/ — dépôt brut des rendus.
  • ~/png_jobs/viz_export/work/ — composition optionnelle / filigrane.
  • ~/png_jobs/viz_export/out/AAAA-MM-JJ/ — assets promus + manifeste.
  • ~/png_jobs/viz_export/log/export.jsonl — une ligne JSON par fichier : outil, version, dpi ou scale, sha256.

Pour très grands canevas ou cadres 4K, croisez avec le guide export 4K PNG batch sur Mac M4 distant. Pour portes QA automatisées (dimensions, plafonds d’octets, retry), voyez les motifs OpenClaw QA PNG par lot même en restant d’abord en shell pur.

# Garde-fou Outil
1 Largeur / hauteur = spec (±0 px) sips -g pixelWidth -g pixelHeight ou Pillow Image.open(...).size
2 Octets dans min / max (détecter rendus vides) stat -f%z (BSD) ou seuils watcher
3 Pas de downscale accidentel (dérive dpi / scale) Manifeste : comparer dpi ou scale au lockfile
4 Netteté du texte (spot) Aperçu à 100 % + gabarit slide cible
5 Reproductibilité Même commit + polices figées ⇒ sha256 identique si possible

⑤ Synthèse

Les chemins Agg + savefig et Kaleido + write_image livrent d’excellents PNG lorsque vous figez backend et versions et exprimez la taille soit en pouces × dpi, soit en pixels × scale, sans mélanger les deux de façon ambiguë. Associez toujours une petite plaque QA sRGB, des contrôles alpha sur transparence, et un arbre out/ daté sur un Mac M4 distant pour que les remises dataviz héritent de la même rigueur que les pipelines PNG design.

Suite : louer un Mac M4 distant pour batch graphiques

Parcourez la page d’accueil MacPng pour le contexte produit, puis les offres location et achat et la page tarifs & nœuds : aucune connexion n’est requise pour comparer les forfaits. Après choix du nœud, suivez l’aide SSH / VNC, copiez l’arborescence ci-dessus et planifiez Matplotlib ou Plotly la nuit pendant que le portable reste fermé. D’autres matrices livraison design sont listées dans le blog.

Nœud Apple Silicon batch

Exécuter exports Matplotlib / Plotly sur Mac distant

Gardez les jobs Kaleido et Agg sur un hôte stable, polices et versions figées, et ne promouvez que des PNG signés dans le manifeste — idéal pour decks nocturnes, rapports réglementés et instantanés dashboard haut volume.

Accueil Louer / acheter Tarifs & nœuds Aide
Mac M4 distant · PNG dataviz Batch Matplotlib & Plotly
Louer