Generate Publication-Ready TDA Figures

VerifiedSafe

Generate topological data analysis (TDA) figures following project-specific style and publication conventions.

Sby Skills Guide Bot
Data & AIIntermediate
308/7/2026
Claude Code
#tda#matplotlib#figure-generation#publication-ready#visualization

Recommended for

Our review

Scaffolds publication-ready matplotlib code for common Topological Data Analysis (TDA) figures, following the trajectory_tda repository's style conventions.

Strengths

  • Enforces consistent use of project-defined constants for sizes, DPI, colors, and save behavior.
  • Provides ready-to-use templates for persistence diagrams, barcodes, null histograms, and landscape comparisons.
  • Encapsulates output path and naming conventions (PDF/PNG) for production and working figures.
  • Embeds clear annotation standards (p-values, spines, legends, subplot labels).

Limitations

  • Tied to the trajectory_tda codebase and its constants; not a standalone general-purpose plotting tool.
  • Limited to TDA figure types covered by the templates; custom visualizations need manual code.
  • Does not perform TDA computations or statistical tests—only visualizes results.
When to use it

Use when creating figures for TDA analyses in this project that need to conform to publication standards.

When not to use it

Do not use for quick exploratory plots outside the repository or for non-TDA visualizations.

Security analysis

Safe
Quality score90/100

This skill provides a template for generating matplotlib figure code with specific style constants from a codebase. It does not instruct any execution of external commands or dangerous operations.

No concerns found

Examples

Persistence diagram for paper P01-B
/tda-figure-spec persistence-diagram P01-B
Null histogram for paper P01-A
/tda-figure-spec null-histogram P01-A
Barcode figure for paper P02-C
Use the /tda-figure-spec skill to generate a barcode figure for paper P02-C.

/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