Skip to main content

plot-saver

plot-saver is a small reusable package for adding save buttons to Matplotlib figures in marimo notebooks.

It saves plots under a project results directory and can be configured with a project-level config.toml.

Installation

pip install plot-saver

or with uv:

uv add plot-saver

Config

plot-saver looks for a config.toml by searching upward from the current working directory.

All configuration keys are optional. If you do not provide a config.toml, or if you only provide some keys, plot-saver falls back to its built-in defaults.

The default output format is png.

You can override the defaults with a section like this:

[plot-saver]
format = "png"
default_label = "Save"
save_all_label = "Save all model plots"
empty_title = "No plots available"
empty_detail = "Render the notebook plots first."
saved_title = "Saved"
saved_many_title = "Saved {count} plots"
saved_error_title = "Saved with errors"
failed_title = "Could not save plots"
toast_detail_color = "#6b7280"

[plot-saver.theme]
radius = "8px"
padding_y = "0.45rem"
padding_x = "0.9rem"
font_size = "0.9rem"
light_border = "rgba(107, 114, 128, 0.35)"
light_background = "rgba(249, 250, 251, 0.95)"
light_text = "#111827"
light_hover_background = "rgba(243, 244, 246, 1)"
light_hover_border = "rgba(107, 114, 128, 0.55)"
light_disabled_background = "rgba(229, 231, 235, 0.9)"
light_disabled_border = "rgba(156, 163, 175, 0.35)"
dark_border = "rgba(156, 163, 175, 0.35)"
dark_background = "rgba(31, 41, 55, 0.95)"
dark_text = "#f3f4f6"
dark_hover_background = "rgba(55, 65, 81, 1)"
dark_hover_border = "rgba(209, 213, 219, 0.45)"
dark_disabled_background = "rgba(55, 65, 81, 0.8)"
dark_disabled_border = "rgba(107, 114, 128, 0.35)"

Usage

from pathlib import Path

import marimo as mo
import matplotlib.pyplot as plt
from plot_saver import make_plot_saver

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [1, 3, 2])

save_plot = make_plot_saver(
    mo,
    results_dir=Path("results"),
    config_path=None,
    task_name="2AFC",
    model_id="example-model",
)

button = save_plot(fig, "Example figure")
save_all = save_plot.save_all_widget()

Saved plots go to:

results/plots/<task_name>/<model_id>/

save_plot(fig, "Example figure") registers that figure and returns an individual save button for it.

save_plot.save_all_widget() returns a single button that saves every figure previously registered with that PlotSaver instance. This is useful in notebooks where you render several figures for the same task and model and want one action to export all of them together.

API

Main entry points:

  • make_plot_saver(...)
  • save_button(...)
  • save_figure(...)
  • get_plot_save_format(...)
  • find_project_config_path(...)

Release files for plot-saver 0.1.7

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

Source distribution (sdist)

Source distribution for plot-saver 0.1.7
File Size Uploaded
plot_saver-0.1.7.tar.gz 56.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for plot-saver 0.1.7
File Interpreter ABI Platform
plot_saver-0.1.7-py3-none-any.whl Python 3 none any Details

Total release size: 64.9 kB

Release files / plot_saver-0.1.7.tar.gz

Download URL plot_saver-0.1.7.tar.gz
Size 56.1 kB
Tags Source
SHA-256 checksum
How to use checksums
85fed272de32ba5f8be02bfa581a87381aa807d2c639ca4654a731b11555e193
BLAKE2b-256 checksum
How to use checksums
94805a8619e939cad4b657b1fe61d4d46ca923bad20db29ab929a0d7f5f3736a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release files / plot_saver-0.1.7-py3-none-any.whl

Download URL plot_saver-0.1.7-py3-none-any.whl
Size 8.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
117f1e1bcf0d9023495287c746ffc3c998cadad40cc274dd34a80901f5768f4f
BLAKE2b-256 checksum
How to use checksums
6c1e1b9eb15a2d56025844165c713f82864f07ab653622ee7982e91d9fd68493
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.7 This release

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release 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