著者:関 勝寿
公開日:2025年9月3日
キーワード: python science

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.pdffig3d.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ライセンス