scientific-visualization
Skill0 starsChanged 23 days agoMITView on GitHub
Create and audit truthful, accessible, publication-ready scientific figures with Matplotlib, Seaborn, or Plotly. Use for figure design, multi-panel layouts, uncertainty and missing-data displays, color/contrast review, image metadata validation, and journal export planning.
21 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- HughYau/AcademicForgetheir own version, first seen Nov 8, 2026
- BrightGold70/skillstheir own version, first seen Nov 8, 2026
- Big-LAORE/Biblioth-que-de-skillsedited, first seen Nov 1, 2026
- davidanthonyn/claude-skillstheir own version, first seen Oct 20, 2026
- erafat/skillstheir own version, first seen Oct 15, 2026
- patoangolano/bio-stackedited, first seen Oct 15, 2026
Used with
Projects with it also use usfiscaldata, etetoolkit and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
yf8578Skillusfiscaldata
Query the U.S. Treasury Fiscal Data API for federal financial data including national debt, government spending, revenue, interest rates, exchange rates, and savings bonds. Access 54 datasets and 182 data tables with no API key required. Use when working with U.S. federal fiscal data, national debt tracking (Debt to the Penny), Daily Treasury Statements, Monthly Treasury Statements, Treasury securities auctions, interest rates on Treasury securities, foreign exchange rates, savings bonds, or any U.S. government financial statistics.
Also in 6 projects that use this
garri333Skilletetoolkit
Phylogenetic tree toolkit (ETE). Tree manipulation (Newick/NHX), evolutionary event detection, orthology/paralogy, NCBI taxonomy, visualization (PDF/SVG), for phylogenomics.
Also in 10 projects that use this
garri333Skilldeeptools
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Also in 9 projects that use this
tondevrelSkillscikit-bio
Library for bioinformatics and community ecology statistics. Provides data structures and algorithms for sequences, alignments, phylogenetics, and diversity analysis. Essential for microbiome research and ecological data science. Use for alpha/beta diversity metrics, ordination (PCoA), phylogenetic trees, sequence manipulation (DNA/RNA/Protein), distance matrices, PERMANOVA, and community ecology analysis.
Also in 9 projects that use this
Hongyu-yuSkilltorch-geometric
Graph Neural Networks (PyG). Node/graph classification, link prediction, GCN, GAT, GraphSAGE, heterogeneous graphs, molecular property prediction, for geometric deep learning.
Also in 9 projects that use this
- +7 more from garri333
Other versions21 projects use a version of this.
Word for word · 2
- zh123012/claude-skills★ 1100% same
- andfrancot-alt/claude-skills★ 0100% same
Edited · 3
- Big-LAORE/Biblioth-que-de-skills★ 169% same
- Luooops/skills★ 191% same
- patoangolano/bio-stack★ 069% same
Wrote their own version · 16
- aiming-lab/AutoResearchClaw★ 15ksame name
- HughYau/AcademicForge★ 2.6ksame name
- wu-yc/LabClaw★ 1.1ksame name
- LeonChaoX/qinyan-academic-skills★ 910same name
- jaechang-hits/SciAgent-Skills★ 386same name
- qinyan-ai/qinyan-academic-skills★ 80same name
- erafat/skills★ 17same name
- SFETNI/Deep-Matter-Chem-Skills★ 10same name
- hxhx-win/zhuanli-flow★ 4same name
- rm2thaddeus/Aitor_Skills★ 4same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository24 other files it gives its agents.
- AGENTS.mdAGENTS.md
- accuracy-assessmentSkill
- brainstormingSkill
- crs-and-unitsSkill
- design-postgis-tablesSkill
- gdalSkill
- geomasterSkill
- geopandasSkill
- geoparquet-validationSkill
- geospatial-data-discoverySkill
- geospatial-frontendSkill
- geozarrSkill
- networkxSkill
- raster-processingSkill
- sar-basicsSkill
- satellite-preprocessingSkill
- spectral-indicesSkill
- stac-and-cloud-accessSkill
- statistical-analysisSkill
- systematic-debuggingSkill
- time-series-and-changeSkill
- vector-qualitySkill
- verificationSkill
- writing-plansSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
18 rules. 0 are common, 12 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 19 edited versions we read keep these.
12
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
Never alter, hide, invent, or selectively enhance data to improve a figure.
- Distinctive: line 20
Do not infer journal requirements.
- Distinctive: line 21
Do not claim that a palette, DPI value, format, or automated report makes a figure accessible or journal-compliant.
- Distinctive: line 22
Do not silently connect missing observations, suppress inconvenient points, upsample images as if detail increased, or tune axes/dual axes …
- Distinctive: line 23
Keep interactive and static outputs as distinct deliverables.
- Very specific: line 25
Read references/publication_guidelines.md for deceptive-encoding and integrity checks.
- Distinctive: line 40
If requirements are not known, create a provisional general figure and label all publisher choices as pending verification.
- Distinctive: line 44
Prefer position on a common scale.
- Distinctive: line 55
Dual axes: prefer aligned panels; if unavoidable, justify units and do not engineer apparent correlation.
- Distinctive: line 60
Use color plus marker, line style, hatching, direct label, or panel separation.
- Distinctive: line 65
Treat WCAG 2.2 as web guidance: 4.5:1 normal text, 3:1 large text, and 3:1 for graphical objects required for understanding.
- Distinctive: line 71
Use Matplotlib's object-oriented API and temporary style contexts:
- Very specific: line 103
Use LogNorm, CenteredNorm, SymLogNorm, BoundaryNorm, or TwoSlopeNorm only when its mapping matches the scientific meaning.
- Very specific: line 128
Use write_html() for interaction and write_image()/plotly.io.write_images() for static output.
- Very specific: line 131
Do not pass deprecated engine= or use Orca/plotly.io.kaleido.scope.
- Distinctive: line 165
Use an opaque explicit background unless transparency is required.
- Very specific: line 195
All helpers are deterministic, network-free, bounded, reject symlink inputs/destinations where relevant, and refuse overwrite unless …
- Very specific: line 232
Add --input figure.pdf to screen machine-readable properties.
“Common” is measured: kept by at least 6 in 10 of the 19 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Scientific Visualization
Build figures that preserve scientific meaning before optimizing appearance. Separate universal principles from dated publisher rules, preserve raw data and transformations, use color redundantly, and inspect delivered files rather than trusting plotting defaults.
Non-negotiable guardrails
- Never alter, hide, invent, or selectively enhance data to improve a figure.
- Preserve raw tables/images, exclusions, missing-value codes, analysis code, normalization, binning, image adjustments, and random seeds.
- Do not infer journal requirements. Identify the exact journal, article type, figure type, and submission phase; verify its live official guidance.
- Do not claim that a palette, DPI value, format, or automated report makes a figure accessible or journal-compliant.
- Do not silently connect missing observations, suppress inconvenient points, upsample images as if detail increased, or tune axes/dual axes to exaggerate a conclusion.
- Keep interactive and static outputs as distinct deliverables. Interactive hover is not a substitute for labels, alt text, keyboard access, an accessible data table, or a static fallback.
Read references/publication_guidelines.md for deceptive-encoding and integrity checks. Read references/journal_requirements.md only after the target and phase are known.
Workflow
1. Define the evidence and destination
Record:
- audience and medium: manuscript, web, slide, poster, supplement;
- exact publisher/journal, article type, submission phase, and intended final width;
- variable semantics, units, sample/replicate structure, missing/censored values;
- estimator and uncertainty definition;
- transformations: filtering, aggregation, normalization, smoothing, bins, image processing;
- source-data paths/identifiers and output provenance.
If requirements are not known, create a provisional general figure and label all publisher choices as pending verification.
2. Choose an honest encoding
Prefer position on a common scale. Before coding, check:
- Bars/areas: normally include zero because length/area is measured from a baseline.
- Points/lines: nonzero limits can be valid; show context and disclose breaks.
- Uncertainty: name SD, SE, CI, percentile, posterior, or another interval; state
nand the unit of replication. - Raw observations: show them when feasible; do not let jitter obscure categories/values.
- Missing data: distinguish missing, zero, censored, and excluded; use gaps or explicit model/interpolation styling.
- Area/volume: scale area/volume, not radius/diameter; avoid decorative 3D.
- Log axes: label the base/transform and declare how zero/negative values are handled.
- Binning/smoothing: record edges, bandwidth/window, method, and sensitivity.
- Normalization: state formula/reference and keep limits consistent across compared panels.
- Dual axes: prefer aligned panels; if unavoidable, justify units and do not engineer apparent correlation.
- Images: preserve originals, disclose whole-image adjustments, show scale bars, and avoid clipped/erased background.
3. Design accessibility in, not after
- Use color plus marker, line style, hatching, direct label, or panel separation.
- Choose qualitative, sequential, diverging, or cyclic color according to data semantics.
- Audit foreground/background contrast at the rendered size.
- Make missing and out-of-range values explicit.
- Provide alt text, a longer description for complex figures, and underlying data for web delivery.
- Treat WCAG 2.2 as web guidance: 4.5:1 normal text, 3:1 large text, and 3:1 for graphical objects required for understanding; color cannot be the only cue. Applicability and exceptions matter.
See references/color_palettes.md. A grayscale screen is useful but is not a complete color-vision or accessibility test.
4. Implement with scoped styles
Use Matplotlib's object-oriented API and temporary style contexts:
import matplotlib.pyplot as plt
from style_presets import style_context
with style_context("default", palette_name="okabe_ito_on_white"):
fig, ax = plt.subplots(
figsize=(89 / 25.4, 60 / 25.4),
layout="constrained",
)
ax.plot(x, y, marker="o", label="Observed")
ax.set(xlabel="Time (hours)", ylabel="Response (unit)")
ax.legend()layout="constrained" supports colorbars, nested GridSpec, subfigures, and subplot_mosaic. Do not call tight_layout() afterward; it disables constrained layout.
For exact physical dimensions, do not use bbox_inches="tight" unless the changed page size is intentional.
Color normalization
import matplotlib as mpl
norm = mpl.colors.TwoSlopeNorm(vmin=-2, vcenter=0, vmax=5)
cmap = mpl.colormaps["RdBu_r"].with_extremes(bad="#777777")
image = ax.imshow(values, norm=norm, cmap=cmap, interpolation="nearest")
fig.colorbar(image, ax=ax, label="Change (unit)")Use LogNorm, CenteredNorm, SymLogNorm, BoundaryNorm, or TwoSlopeNorm only when its mapping matches the scientific meaning.
Seaborn
Seaborn 0.13.2 uses the current errorbar API:
sns.lineplot(
data=frame,
x="time",
y="response",
hue="treatment",
style="treatment",
markers=True,
errorbar=("ci", 95),
n_boot=5000,
seed=20260723,
ax=ax,
)Axes-level functions fit custom Matplotlib layouts; figure-level functions create their own figures/facets. Do not customize Seaborn's internal artist lists as if they were stable API.
Plotly
- Use
write_html()for interaction andwrite_image()/plotly.io.write_images()for static output. - Kaleido 1.3.0 requires Chrome/Chromium; it no longer bundles Chrome.
- Current static formats: PNG, JPEG, WebP, SVG, PDF. EPS is Kaleido v0-only.
- Do not pass deprecated
engine=or use Orca/plotly.io.kaleido.scope. width,height, andscalecontrol pixels;scale=3is not inherently “300 DPI.”- WebGL traces embed raster content in PDF/SVG.
- Fully offline exports need local external assets when a figure references MathJax/topojson/tiles.
5. Export explicitly and record provenance
from figure_export import export_figure
report = export_figure(
fig,
"outputs/figure1",
formats=["pdf", "png"],
dpi=600,
bbox_inches=None, # preserve figure page dimensions
provenance={
"raw_data": "data/source.csv",
"transformations": ["predeclared QC filter", "group mean"],
"uncertainty": "95% bootstrap CI; seed 20260723",
"missing_data": "retained as gaps",
},
write_manifest=True,
)The exporter refuses implicit overwrite, writes atomically, keeps vector DPI for embedded rasters, uses TIFF LZW, and can use PDF/PS Type 42 fonts. It does not validate scientific content or publisher acceptance.
For editable fonts:
- PDF/PS Type 42 embeds TrueType fonts.
svg.fonttype="none"keeps text editable/searchable but does not embed fonts; appearance depends on installed fonts.svg.fonttype="path"preserves glyph appearance as paths but loses editable/searchable text.
Use an opaque explicit background unless transparency is required; blending against another background changes apparent contrast.
6. Inspect, compare, and review
- Inspect file metadata.
- Audit palette contrast/grayscale separation.
- Compare against a dated publisher snapshot.
- View at final size in the manuscript/web context.
- Manually review fonts, embedded rasters, clipping, legends, scale bars, image integrity, caption, alt text, and source data.
- Re-check the live target-journal page immediately before upload.
Pinned snapshot
The examples and smoke tests use direct package pins current on 2026-07-23:
uv run --isolated --no-project --python 3.13 \
--with "matplotlib==3.11.1" \
--with "seaborn==0.13.2" \
--with "plotly==6.9.0" \
--with "kaleido==1.3.0" \
--with "pillow==12.3.0" \
--with "pypdf==6.14.2" \
python your_figure.pyThis is a dated direct-dependency snapshot, not a transitive lock. Use the project's uv lock for exact replay; this skill intentionally ships no dependency lock.
Bundled CLIs
All helpers are deterministic, network-free, bounded, reject symlink inputs/destinations where relevant, and refuse overwrite unless --force is explicit.
Inspect raster/vector metadata
uv run --isolated --no-project --python 3.13 \
--with "pillow==12.3.0" \
python scripts/image_metadata.py figure.tiff \
--format tiff --mode RGB --min-dpi 300 --target-width-mm 85 \
--alpha-policy forbidSupports raster images (Pillow), SVG, PDF (pypdf), and EPS/PS. Reports dimensions, DPI/effective DPI, mode, alpha, ICC presence, compression, page size, and conservative first-page PDF font resources. It does not inspect every embedded raster in a vector container.
Audit palette contrast and grayscale
uv run --isolated --no-project --python 3.13 \
python scripts/palette_audit.py \
--palette okabe_ito_on_white \
--background FFFFFF \
--role graphicalReports exact WCAG sRGB contrast plus pairwise CIE L* grayscale screening. The grayscale threshold is a heuristic, not a standard.
Plan/screen publisher export
uv run --isolated --no-project --python 3.13 \
python scripts/export_plan.py \
--publisher nature \
--figure-type combination \
--width single \
--phase finalAdd --input figure.pdf to screen machine-readable properties. Profiles are official-source snapshots accessed 2026-07-23, not automatic compliance rules.
Preview styles
uv run --isolated --no-project --python 3.13 \
--with "matplotlib==3.11.1" \
python scripts/style_preview.py \
--output outputs/style-preview \
--style default \
--palette okabe_ito_on_white \
--formats png,svgInspect/write styles and smoke-test export
uv run --isolated --no-project --python 3.13 \
python scripts/style_presets.py --list
uv run --isolated --no-project --python 3.13 \
python scripts/style_presets.py --show nature
uv run --isolated --no-project --python 3.13 \
--with "matplotlib==3.11.1" \
python scripts/figure_export.py --demo outputs/export-smoke --manifestAssets
assets/publication.mplstyle: general print starting point.assets/nature.mplstyle: dated flagship Nature visual starting point, not a compliance preset.assets/presentation.mplstyle: larger projected-display style.assets/color_palettes.py: importable Okabe-Ito and Paul Tol values with metadata.assets/publisher_profiles.json: dated, machine-readable planning snapshots.
Matplotlib style files omit # in hex colors because # begins comments in .mplstyle parsing.
References
references/publication_guidelines.md: integrity, deceptive encodings, accessibility, static/interactive output.references/color_palettes.md: palette semantics, exact values, WCAG contrast, grayscale caveats, color management.references/journal_requirements.md: phase-specific official publisher snapshots.references/matplotlib_examples.md: current, runnable Matplotlib/Seaborn/Plotly patterns.references/sources.md: official URLs, dates, versions, and research basis.
Final review checklist
- Raw data/images and transformation code are preserved.
- Missing values, exclusions, bins, normalization, and uncertainty are explicit.
- Baselines, scales, limits, and area/volume encodings are honest.
- Color is redundant and rendered contrast was reviewed.
- Figure has an accessible description/data alternative where applicable.
- Physical dimensions, DPI, format, fonts, transparency, and file size were inspected after export.
- Publisher rules were verified for the exact journal and phase.
- No automated report is presented as a scientific, accessibility, or compliance certification.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

