From fc047b760b4cf76074bfe6201734315b11f6bcc5 Mon Sep 17 00:00:00 2001 From: James McClung Date: Wed, 8 Jul 2026 14:22:39 -0400 Subject: [PATCH 1/4] parsing/*: +save-dpi --- src/lib/parsing/args.py | 1 + src/lib/parsing/parse.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/lib/parsing/args.py b/src/lib/parsing/args.py index 9934a26..9ab6e49 100644 --- a/src/lib/parsing/args.py +++ b/src/lib/parsing/args.py @@ -19,6 +19,7 @@ class Args(argparse.Namespace): show: bool save: Path | None save_format: str | None + save_dpi: float | None dask_graph: bool def get_data(self) -> DataWithAttrs: diff --git a/src/lib/parsing/parse.py b/src/lib/parsing/parse.py index a9cd1d9..95c7f59 100644 --- a/src/lib/parsing/parse.py +++ b/src/lib/parsing/parse.py @@ -31,6 +31,12 @@ def _get_parser(prefixes: Iterable[str]) -> argparse.ArgumentParser: default=None, help="format for saved animations (default: mp4, falls back to gif if ffmpeg unavailable)", ) + parser.add_argument( + "--save-dpi", + type=float, + default=None, + help="dots per inch of saved figure (defaults to Matplotlib's default)", + ) parser.add_argument( "--dask-graph", action="store_true", From 355332f6c6d6abe5151e9b713dea79a61bd2778e Mon Sep 17 00:00:00 2001 From: James McClung Date: Wed, 8 Jul 2026 14:23:23 -0400 Subject: [PATCH 2/4] plotting/*: +dpi arg --- src/lib/plotting/animated_plot.py | 4 ++-- src/lib/plotting/plot.py | 2 +- src/lib/plotting/static_plot.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/plotting/animated_plot.py b/src/lib/plotting/animated_plot.py index fe1a117..5efda2b 100644 --- a/src/lib/plotting/animated_plot.py +++ b/src/lib/plotting/animated_plot.py @@ -60,7 +60,7 @@ def show(self): def allowed_save_formats(self) -> list[SaveFormat]: return ["mp4", "gif"] - def save_to_path(self, path: Path): + def save_to_path(self, path: Path, *, dpi: float | None = None): self._initialize() writer = PillowWriter() if path.suffix == ".gif" else FFMpegWriter() - self.anim.save(path, writer=writer) + self.anim.save(path, writer=writer, dpi=dpi) diff --git a/src/lib/plotting/plot.py b/src/lib/plotting/plot.py index 8e33d60..4b2f4a1 100644 --- a/src/lib/plotting/plot.py +++ b/src/lib/plotting/plot.py @@ -32,7 +32,7 @@ def add_hook(self, hook: Hook): def show(self): ... @abstractmethod - def save_to_path(self, path: Path): ... + def save_to_path(self, path: Path, *, dpi: float | None = None): ... @abstractmethod def allowed_save_formats(self) -> list[SaveFormat]: ... diff --git a/src/lib/plotting/static_plot.py b/src/lib/plotting/static_plot.py index 9f0e37e..4dd9b4a 100644 --- a/src/lib/plotting/static_plot.py +++ b/src/lib/plotting/static_plot.py @@ -32,6 +32,6 @@ def show(self): def allowed_save_formats(self) -> list[SaveFormat]: return ["png"] - def save_to_path(self, path: Path): + def save_to_path(self, path: Path, *, dpi: float | None = None): self._initialize() - self.fig.savefig(path, dpi=300.0) + self.fig.savefig(path, dpi=dpi or "figure") From 6ce5018e94eb16faed3e826b2d8e0b95dddc6612 Mon Sep 17 00:00:00 2001 From: James McClung Date: Wed, 8 Jul 2026 14:23:29 -0400 Subject: [PATCH 3/4] cli: pass save_dpi --- src/lib/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/cli.py b/src/lib/cli.py index 52ece0b..98f49e2 100644 --- a/src/lib/cli.py +++ b/src/lib/cli.py @@ -113,5 +113,5 @@ def main(): format = plot.default_save_format() path = args.save / f"{args.get_save_file_stem()}.{format}" - plot.save_to_path(path) + plot.save_to_path(path, dpi=args.save_dpi) print(f"wrote to {path}") From 81f9e11e9eaa4af15b12665c0f2e6629428cd528 Mon Sep 17 00:00:00 2001 From: James McClung Date: Wed, 8 Jul 2026 15:44:36 -0400 Subject: [PATCH 4/4] field_2d: interpolate=nearest fix blurring along short axis, i think --- src/lib/plotting/renderers/field_2d.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/plotting/renderers/field_2d.py b/src/lib/plotting/renderers/field_2d.py index d2fcd06..f27c1de 100644 --- a/src/lib/plotting/renderers/field_2d.py +++ b/src/lib/plotting/renderers/field_2d.py @@ -49,6 +49,7 @@ def init(self, fig: Figure, ax: Axes, full_data: Field, frame_data: Field, init_ origin="lower", extent=(*get_extent(da, spatial_dims[0]), *get_extent(da, spatial_dims[1])), norm=init_data.color_norm, + interpolation="nearest", ) fig.colorbar(self.im)