PNG チャートはピクセル・アルファ・sRGBの固定が本題。Matplotlib/Plotlyの比較表、dpi・figsize・transparent・MPLBACKEND・write_image例、sRGB 表、リモート M4のviz_exportと5 ゲートを整理。
① 意思決定マトリクス
スタイルを Python で固定するなら Matplotlib。同一 Figure から Dash と PNG を揃えるなら Plotly。
| 観点 | Matplotlib | Plotly |
|---|---|---|
| バッチ | 優 MPLBACKEND=Agg/use("Agg") を import 前に |
優 kaleido+write_image(..., engine="kaleido") |
| 寸法 | インチ×dpi。tight は余白可変→テンプレ要確認 |
px の width/height+scale |
| 透過 | transparent=True+facecolor="none"、暗板で抜取 |
背景 rgba(0,0,0,0)、#000/#FFF で確認 |
| 用途 | 静的・印刷寄り | Dash 同居。スナップ時は状態注意 |
| リスク | フォント・tight 欠け | 版ずれ・WebGL 肥大 |
② 実行パラメータ
リモート M4:CI と同一ユーザーでフォント固定。
Matplotlib
横幅(px) ≈
figsize[0]*dpi(tight で変動)→ sips か Pillow で実測。
export MPLBACKEND=Agg
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/matplotlib_chart.png",
dpi=300,
transparent=True,
facecolor="none",
edgecolor="none",
bbox_inches="tight",
pad_inches=0.05,
)
dpi:資料 144〜300、印刷なら 300+。figsize:README にインチ契約を 1 行。transparent+facecolor="none":白マット防止。- 文字周りは
mplcairoも比較検収可。
Plotly(write_image)
write_imageで PNG(write_png無し)
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,
engine="kaleido",
)
width/height:スライド px 契約。scale:1x は1、Retina なら2。kaleido/plotlyは lock で固定。
Pillow(任意)
合成後 save(..., format="PNG")。先に単体でアルファ検収。
③ sRGB 最小検収
ICC は自動では付きません。sRGB 納品を README で固定し下表で抜取。デザイン PNG 全般は Figma 系ワークフロー参照。
| 項目 | 手順 | 合格 |
|---|---|---|
| 意図 | README に sRGB/P3 分離を明記 | チケットと一致 |
| 背景 | #FFF/#0B プレート | ガンマ・トークン許容内 |
| 透過 | 凡例角 400% | 灰縁なし |
| ICC | 画素 QA 後に sips 等 |
画素不変 |
④ リモート M4:パスと検収
夜間バッチは専用ノードへ。フォルダ規約はデザイン PNG と揃える。
~/png_jobs/viz_export/inbox/一次出力.../work/合成任意.../out/YYYY-MM-DD/合格+manifest.../log/export.jsonltool・版・dpi/scale・sha256
| # | ゲート | ツール例 |
|---|---|---|
| 1 | WxH ±0 px | sips/Pillow |
| 2 | バイト min/max | stat -f%z |
| 3 | dpi/scale ずれなし | manifest と lock |
| 4 | 文字抜取 | 100%+スライド実貼り |
| 5 | 再現性 | 同一コミットで sha256(フォント固定) |
⑤ まとめ
版固定+インチ×dpiまたはpx×scaleの単一契約。sRGB 表とviz_exportをリモート M4へ。