Skip to main content

paperfig: JSON‑driven figure orchestrator

paperfig is a small library for building per-figure PDFs from a JSON spec and combining them into a single figures.pdf. The JSON file can mix data and rendering functions, so you can flexibly compose plots and layouts. This makes it handy for generating figures for papers. You provide the renderers (Python functions that draw and save fig{index}.pdf), while paperfig takes care of JSON parsing, dispatching, multi-panel layouts, and concatenation.

Key features

  • Simple JSON spec → figures
  • Use your own renderers; paperfig only orchestrates
  • Supports both simple figures and multi‑panel grids
  • Concatenates everything into a single figures.pdf
  • Extensible: register functions, import "module:function", or use entry points

Install

  • Library only: pip install paperfig
  • With example dependencies: pip install "paperfig[examples]"

Quick start (run the bundled example)

  • Clone the source repository
git clone https://github.com/sekika/paperfig.git
  • Change into the examples directory and run the script:
cd paperfig/docs/examples
python fig.py
  • Outputs:
    • docs/examples/fig/fig1.pdf, fig2.pdf, fig3a.pdf … fig3d.pdf
    • docs/examples/fig/fig3.pdf (2x2 multi panel)
    • docs/examples/fig/figures.pdf (all pages concatenated)

CLI

  • Build: paperfig build path/to/fig.json -d out -o figures.pdf
  • Validate only: paperfig validate path/to/fig.json
  • List figures: paperfig list path/to/fig.json

Minimal API example

  • Define a renderer that writes fig{index}.pdf into fig_dir. Register and build.
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 spec example (with multi)

{
  "1": { "type": "hello" },
  "2": { "type": "hello" },
  "3": {
    "type": "multi",
    "row": 1,
    "column": 2,
    "figures": {
      "3a": { "type": "hello" },
      "3b": { "type": "hello" }
    }
  }
}

Extensibility

  • Register a renderer in code: fig.function["name"] = callable
  • Refer to a renderer by string: "module:function" in JSON type
  • Plugin system: packages can expose entry points under paperfig.renderers

Documentation

License

  • MIT License

Metadata

Release files for paperfig 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for paperfig 0.2.0
File Size Uploaded Provenance Actions
paperfig-0.2.0.tar.gz 6.1 kB Without provenance Details for paperfig-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for paperfig 0.2.0
File Interpreter ABI Platform Actions
paperfig-0.2.0-py3-none-any.whl Python 3 none any Details for paperfig-0.2.0-py3-none-any.whl

Total release size: 13.5 kB

Release files / paperfig-0.2.0.tar.gz

Download URL paperfig-0.2.0.tar.gz
Size 6.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ac49472d74456f20131cd9e43b97ea681323ffba67816aa31a5c286a44527cd9
BLAKE2b-256 checksum
How to use checksums
b43107266eb317f7bb5cbfc983182c39640e80eecf97add752fe7f6d3cdcdeee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / paperfig-0.2.0-py3-none-any.whl

Download URL paperfig-0.2.0-py3-none-any.whl
Size 7.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9145eadd2b74eff108b19a4c8dbec596126ab112d3aa31c15fffd1cf9453fab0
BLAKE2b-256 checksum
How to use checksums
eaffaa2703817fb5a817b12f043f5d66eb977cc5de95819610f347eaeff13519
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Security for paperfig 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page