paperfig - JSONベースの図表生成ライブラリ
paperfig
は、JSONで記述した設定をもとに図ごとのPDFを作成し、それらをまとめて1つの figures.pdf
に結合できる小さなライブラリです。論文の図を作成するためのデータ・グラフ描画関数を再利用可能な形で一括管理するために自作したものを公開しました。
JSONファイルにはデータと描画関数を組み合わせて記述できるので、柔軟にグラフやレイアウトを構成できます。ユーザーは描画用の関数(fig{index}.pdf
を出力するPython関数)を用意し、JSONの読み込み・呼び出し・複数パネルの配置・結合といった処理は paperfig
が担当します。
特徴
- シンプルなJSON定義から図を生成
- レンダリング処理は自作関数で自由に実装(
paperfig
は制御役) - 単一図から複数パネルのグリッドまで対応
- 最終的にすべての図を1つの
figures.pdf
に結合 - 拡張可能:関数の登録、
"module:function"
の指定、エントリーポイントによるプラグイン
インストール方法
-
ライブラリ本体のみ:
pip install paperfig
-
サンプル実行のためのパッケージ付き:
pip install "paperfig[examples]"
クイックスタート(付属サンプルを実行)
- ソースリポジトリのクローン
git clone https://github.com/sekika/paperfig.git
- ディレクトリに入ってスクリプトを実行:
cd paperfig/docs/examples python fig.py
-
出力されるファイル例:
docs/examples/fig/fig1.pdf
,fig2.pdf
,fig3a.pdf
…fig3d.pdf
docs/examples/fig/fig3.pdf
(2x2のマルチパネル)docs/examples/fig/figures.pdf
(全図をまとめたPDF)
コマンドライン
- ビルド:
paperfig build path/to/fig.json -d out -o figures.pdf
- 検証のみ:
paperfig validate path/to/fig.json
- 図の一覧表示:
paperfig list path/to/fig.json
最小限のAPI使用例
描画関数を定義し、fig{index}.pdf
を指定ディレクトリに保存する。
from paperfig.figure import Fig
import matplotlib.pyplot as plt
def render_hello(index, data, verbose=1):
fig, ax = plt.subplots()
ax.text(0.5, 0.5, f"Hello {index}", ha="center", va="center")
plt.savefig(f"out/fig{index}.pdf"); plt.close(fig)
fig = Fig("fig.json")
fig.fig_dir = "out"
fig.function = {"hello": render_hello}
fig.create_pdf()
JSON定義例(マルチパネル含む)
{
"1": { "type": "hello" },
"2": { "type": "hello" },
"3": {
"type": "multi",
"row": 1,
"column": 2,
"figures": {
"3a": { "type": "hello" },
"3b": { "type": "hello" }
}
}
}
拡張方法
- コード内で関数を登録:
fig.function["name"] = callable
- JSONで
"module:function"
を指定して関数を呼び出し - プラグインシステム対応:パッケージが
paperfig.renderers
エントリーポイントを公開可能
ドキュメント
詳しくは: https://sekika.github.io/paperfig/
ライセンス
MITライセンス