Generate Publication-Ready TDA Figures

VerifiedSafe

Scaffolds matplotlib figures for Topological Data Analysis following established codebase conventions. Includes templates for persistence diagrams, barcodes, null histograms, and landscape comparisons.

Sby Skills Guide Bot
Data & AIIntermediate
008/1/2026
Claude Code
#topological-data-analysis#matplotlib#figure-generation#publication-figures#trajectory-analysis

Recommended for

Our review

Provides a structured scaffold for generating publication-ready topological data analysis figures with matplotlib, enforcing project-specific style constants, figure sizes, color rules, annotations, and output paths.

Strengths

  • Enforces consistent styling via shared constants (DPI, figure sizes, state colors)
  • Includes ready-to-use templates for common TDA visualizations (persistence diagrams, barcodes, null histograms, landscape comparisons)
  • Clarifies production vs exploratory output paths to avoid polluting paper directories
  • Standardizes annotations and save patterns (PDF+PNG)

Limitations

  • Tightly coupled to the specific codebase's trajectory_tda.viz conventions
  • Limited to TDA-related figures; not a general-purpose plotting skill
  • No explicit support for interactive or custom plot types beyond listed templates
When to use it

Use when creating or modifying TDA figures for a paper or supplement in this project.

When not to use it

Do not use for general exploratory plots outside the TDA figure conventions or for non-matplotlib visualizations.

Security analysis

Safe
Quality score85/100

The skill only provides guidelines for generating matplotlib code and imports from an existing codebase. It does not execute any system commands or perform network operations.

No concerns found

Examples

Persistence diagram for paper P01-B
/tda-figure-spec persistence-diagram P01-B
Null hypothesis histogram
/tda-figure-spec null-histogram P01-A
Interactive figure scaffold
/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