Skip to main content

ResearchPlot

Source-backed venue compliance, artifact auditing, and submission bundles for Matplotlib figures.

PyPI Python CI Documentation License: MIT

ResearchPlot turns a venue name into a reproducible figure target. It styles a Matplotlib figure at the requested physical width, evaluates source-backed rules, exports transactionally, audits the files that were actually written, and can assemble a submission bundle with hashes and provenance.

It is a compliance assistant, not an acceptance guarantee. Every result distinguishes verified facts from recommendations, inferences, manual requirements, and checks the software could not establish.

ResearchPlot compliance architecture

Install

python -m pip install researchplot-venues

The distribution is called researchplot-venues; the import and command remain researchplot:

import researchplot as rp

ResearchPlot 1.x requires Python 3.11 or newer. It works offline at runtime, does not download fonts or templates, and does not require LaTeX. The old plotting wrappers are not shipped in 1.x. If an older project still needs them, pin the final 0.2 release in a separate environment:

python -m pip install "researchplot-venues[plots]==0.2.1"

Create and verify one figure

from pathlib import Path

import matplotlib.pyplot as plt
import researchplot as rp

target = rp.target(
    "nature@2026.08.0",
    role="main",
    width="single",
    content="line-art",
)

with target.style() as style:
    fig, ax = style.subplots(aspect=0.62)
    ax.plot([0, 1, 2, 3], [0, 1, 4, 9], marker="o")
    ax.set(xlabel="Input", ylabel="Response")

    result = target.export(fig, Path("submission") / "figure1.pdf", policy="complete")

print(result.report.verdict)
print(result.paths)
print(result.manifest_path)
plt.close(fig)

policy="complete" rejects both known required violations and unresolved required checks. It stages output in a temporary location, audits the resulting artifact, and starts the final commit only after the selected policy succeeds. Handled commit failures trigger rollback. Multi-file destinations are replaced sequentially, so abrupt process termination and non-cooperating concurrent writers remain outside that guarantee.

Build a submission bundle

submission = rp.Submission(
    "nature@2026.08.0",
    output_dir="submission",
    policy="complete",
)
submission.add(
    "figure1",
    fig,
    role="main",
    width="single",
    content="line-art",
    formats=("pdf",),
    alt_text="A line chart whose response rises quadratically with input.",
    source_data="data/figure1.csv",
)
bundle = submission.build()
print(bundle.manifest_path)
print(bundle.passed)

The manifest records the ResearchPlot version, immutable profile coordinate and digest, full source metadata and caveats, target metadata, file SHA-256 hashes, automated findings, manual attestations, captions, alt text, and copied source-data files when provided.

Compliance has three verdicts

Verdict Meaning
COMPLIANT Every applicable required rule was checked and passed.
NON_COMPLIANT At least one applicable required rule failed.
INDETERMINATE No required rule failed, but at least one required rule could not be established.

Rule level and check outcome are separate. A recommendation can warn without blocking, while inferred guidance is informational. A required SKIP is never presented as a pass.

Export policies let CI choose the boundary:

  • violations: block known required failures;
  • complete: also block unresolved required checks;
  • off: always return evidence without blocking.

Profiles are versioned evidence

Coordinates use <profile-id>@<revision>, for example nature@2026.08.0 or cvpr-2026@2026.08.0. Pinning the coordinate makes a paper reproducible. An unpinned ID or friendly alias resolves to a bundled revision and warns, so a changing default cannot go unnoticed.

The initial 1.0 catalog covers IEEE journals, Nature, generic Elsevier artwork, NeurIPS 2026, ICML 2026, CVPR 2026, ACL 2026, PLOS Biology, and ACM acmart. Missing official guidance remains unspecified rather than being invented. Run:

researchplot profile list
researchplot profile show nature@2026.08.0
researchplot explain figure.width.single --profile nature@2026.08.0
Profile Final width options
ieee-journal@2026.08.0 88.9 / 181.864 mm
nature@2026.08.0 89 / 183 mm
elsevier-generic@2026.08.0 30 / 90 / 140 / 190 mm
neurips-2026@2026.08.0 139.7 mm
icml-2026@2026.08.0 82.55 / 171.45 mm
cvpr-2026@2026.08.0 83.34375 / 174.625 mm
acl-2026@2026.08.0 77 / 160 mm
plos-biology@2026.08.0 132 / 190.5 mm; 66.8–190.5 mm allowed range
acm-acmart@2026.08.0 Bundle metadata only; no generic width

Profiles are bundled JSON validated against a published schema. Every rule states its applicability, strength, verification mode, official source, section or page locator, and verification date. Runtime resolution remains offline.

Check files and projects in CI

# researchplot.toml
profile = "nature@2026.08.0"
policy = "complete"

[[figures]]
path = "figures/figure1.pdf"
role = "main"
width = "single"
content = "line-art"
alt_text = "A line chart comparing the measured response across four inputs."
source_data = "data/figure1.csv"
researchplot check --config researchplot.toml
researchplot check --config researchplot.toml --format json
researchplot check --config researchplot.toml --format sarif > researchplot.sarif
researchplot bundle build --config researchplot.toml

Exit codes are stable: 0 compliant, 1 non-compliant, 2 invalid input or a required capability failure, and 3 indeterminate. SARIF output can be uploaded to GitHub code scanning for inline annotations.

What ResearchPlot inspects

  • Exact physical width and maximum height, with explicit tolerance.
  • Font family and size, line and marker sizes, and prohibited in-figure titles.
  • Color-only series distinction when a profile includes the applicable accessibility rule, plus bundle alt-text presence for ACM.
  • PDF page boxes across all pages, recursive font resources, embedding, and Type 3 fonts.
  • SVG physical dimensions, viewBox, text, font declarations, external references, and embedded assets.
  • PNG, JPEG, and TIFF dimensions, effective DPI, color mode, bit depth, ICC metadata, compression, and file size.
  • EPS format, BoundingBox, and HiResBoundingBox dimensions.

Unobservable properties are reported as skipped. They are not guessed and do not silently pass.

Documentation

Scope and safety

ResearchPlot does not interpret scientific correctness, detect manipulation, replace a publisher's instructions, generate figures or alt text with AI, scrape templates at runtime, or guarantee acceptance. A journal-specific instruction always overrides a generic publisher profile. Review each finding's linked source and use researchplot profile show to inspect all profile caveats.

ResearchPlot is MIT licensed. See CONTRIBUTING.md before proposing a profile or behavioral change, and cite the project using CITATION.cff.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

researchplot_venues-1.0.0.tar.gz (110.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

researchplot_venues-1.0.0-py3-none-any.whl (80.0 kB view details)

Uploaded Python 3

File details

Details for the file researchplot_venues-1.0.0.tar.gz.

File metadata

  • Download URL: researchplot_venues-1.0.0.tar.gz
  • Upload date:
  • Size: 110.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for researchplot_venues-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6f7f5ec3afc26b9bdaa732adda9112353826e42a44dfc9196653ad51a4b2f239
MD5 fdad020801af3594d5237fb6c0788aaf
BLAKE2b-256 e7f86e12429acb9631e9599672cbfd4ede70f587f7ceedad5a136ac2df4ca041

See more details on using hashes here.

Provenance

The following attestation bundles were made for researchplot_venues-1.0.0.tar.gz:

Publisher: release.yml on Devrajsinh-Jhala/ResearchPlot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file researchplot_venues-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for researchplot_venues-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f80fd81d54e8e79ae4fbabea1f58de960d14ded2dd7d764c650b9cb5f89405f4
MD5 4959c353f536abe12e4f5d9072d5160a
BLAKE2b-256 7677183afa6e6f4a94d827e1a10eebe9a978f9ead044769d980cb9b6b793065e

See more details on using hashes here.

Provenance

The following attestation bundles were made for researchplot_venues-1.0.0-py3-none-any.whl:

Publisher: release.yml on Devrajsinh-Jhala/ResearchPlot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

2.0.0

2 files

This release

1.0.0 This release

2 files

0.2.1

2 files

0.2.0

2 files

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