Generate Publication-Ready TDA Figures

VerifiedSafe

Scaffold matplotlib code for TDA figures following established conventions, with predefined style constants, figure sizes, and save functions.

Sby Skills Guide Bot
Data & AIIntermediate
308/6/2026
Claude Code
#tda#matplotlib#visualization#publication-figures

Recommended for

Our review

Scaffolds matplotlib figure code following the trajectory_tda project conventions to produce publication-ready TDA figures.

Strengths

  • Enforces centralized style constants for sizes, colors, and DPI, ensuring consistent figures.
  • Provides templates for persistence diagrams, barcodes, null histograms, and landscape comparisons.
  • Applies scientific color, annotation, and legend conventions suitable for journals.
  • Automatically saves both PDF and PNG outputs with the appropriate file paths.

Limitations

  • Tied to the specific trajectory_tda codebase and its constants.
  • Only covers a limited set of TDA figure types.
  • Requires careful separation between exploratory and production output paths.
When to use it

When generating a TDA figure for a paper or supplement within the trajectory_tda project.

When not to use it

For quick exploratory plots outside project conventions or for non-TDA visualizations.

Security analysis

Safe
Quality score92/100

The skill provides templating and style guidance for generating matplotlib figure code. It does not instruct any destructive actions, data exfiltration, or execution of arbitrary commands. There are no obfuscated payloads, no disabling of safety mechanisms, and no use of shell commands. It only references existing codebase modules for constants and plotting functions.

No concerns found

Examples

Persistence diagram for P01-B
/tda-figure-spec persistence-diagram P01-B
Null histogram for P01-A
/tda-figure-spec null-histogram P01-A
Interactive figure specification
/tda-figure-spec

/tda-figure-spec — Generate Publication-Ready TDA Figures

Scaffold matplotlib figure code following the established trajectory_tda/viz/ conventions. Uses PUBLICATION_RC, DPI, FIGSIZE_*, STATE_COLORS, and _save_figure from the codebase — never ad-hoc sizes or colours.

Usage

/tda-figure-spec [figure-type] [paper-number]

Example: /tda-figure-spec persistence-diagram P01-B Example: /tda-figure-spec null-histogram P01-A Example: /tda-figure-spec (interactive)


Style constants (always import from trajectory_tda/viz/constants.py)

from trajectory_tda.viz.constants import (
    DPI, FIGSIZE_FULL, FIGSIZE_WIDE, FIGSIZE_HALF, FIGSIZE_SQUARE,
    PUBLICATION_RC, STATE_COLORS, STATES, STATE_LABELS, REGIME_LABELS,
)
import matplotlib.pyplot as plt
plt.rcParams.update(PUBLICATION_RC)

Figure size guide

| Use case | Constant | Size | |---|---|---| | Single full-width plot | FIGSIZE_FULL | 190mm × 120mm | | Wide two-panel | FIGSIZE_WIDE | 190mm × 104mm | | Half-width single panel | FIGSIZE_HALF | 90mm × 120mm | | Square heatmap | FIGSIZE_SQUARE | 90mm × 90mm |

Save function (always use this pattern)

def _save_figure(fig, output_dir: Path, name: str) -> None:
    output_dir.mkdir(parents=True, exist_ok=True)
    fig.savefig(output_dir / f"{name}.pdf", format="pdf")
    fig.savefig(output_dir / f"{name}.png", format="png", dpi=DPI)

Colour rules

  • State space: always STATE_COLORS dict — never tab10 or default cycle
  • Observations: #2d6a2e (green); Null: steelblue; Dim 0: green; Dim 1: #1a237e
  • Regimes: plt.cm.tab10 with REGIME_LABELS order
  • Sequential/diverging: viridis, plasma, RdBu_rnever jet

Annotation standards

  • p-values: write p=0.003, not p<0.01
  • Axes: remove top and right spines; keep bottom and left
  • Legends: frameon=False
  • Subplot labels: ax.text(0.02, 0.97, "(a)", transform=ax.transAxes, ...)

Figure templates available

| Template | When to use | |---|---| | plot_persistence_diagram(diagram, dim, ax) | Scatter birth-death pairs | | plot_barcode(diagram, dim, ax) | Feature lifetimes sorted by persistence | | plot_null_histogram(observed, null_dist, p_value, dim, ax) | Permutation test result | | plot_landscape_comparison(obs, null, grid, ax) | L² landscape distance (mandatory) |


Output paths

| Context | Path | Naming | |---|---|---| | Production paper figure | papers/PXX/figures/ | fig{N}_{desc}.{pdf\|png} | | Supplement | papers/PXX/figures/ | figS{N}_{desc}.{pdf\|png} | | Working / exploratory | figures/{domain}/ | YYYYMMDD_{desc}.png |

Working figures must not be saved to papers/PXX/figures/ — that is for production only.

Related skills