Agent skill

Scientific Visualization

by mims-harvard in mims-harvard/OptimusKG

Create publication figures with matplotlib/seaborn/plotly. An agent skill from mims-harvard/OptimusKG.

MITAuto-check passedData & Analytics

Install Scientific Visualization

skills CLI
$ npx skills add mims-harvard/OptimusKG --skill scientific-visualization -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mims-harvard/OptimusKG scientific-visualization --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mims-harvard/OptimusKG.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/scientific-visualization .claude/skills/scientific-visualization && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
scientific-visualization
GitHub stars
146
Used in
19 other repos
Token cost
~6.3k tokens
SKILL.md length
1,490 words
Files
11 (incl. scripts, references, assets)
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Create publication figures with matplotlib/seaborn/plotly. An agent skill from mims-harvard/OptimusKG.

  • Works in 5 steps: Resolution and File Format → Color Selection - Colorblind Accessibility → Typography and Text → …
  • Tasks that involve Data visualization
  • SKILL.md covers Overview, When to Use This Skill, Quick Start Guide and Core Principles and Best…, plus 5 more sections
  • Runs Python scripts from its folder; calls python

What it does

Scientific Visualization is an agent skill from mims-harvard/OptimusKG. Create publication figures with matplotlib/seaborn/plotly. Multi-panel layouts, error bars, significance markers, colorblind-safe, export PDF/EPS/TIFF, for journal-ready scientific plots.

Its SKILL.md is about 6.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts, reference files and assets (for example `assets/color_palettes.py`, `references/color_palettes.md` and `references/journal_requirements.md`).

It sits in Data & Analytics, covering Data visualization. It works with Seaborn, Matplotlib and Plotly. The repository describes itself as: A modern multimodal knowledge graph with type-specific metadata across biomedical domains. The licence is MIT.

When your agent uses it

  • Tasks that involve Data visualization

Example prompts

  • “/scientific-visualization”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Resolution and File Format
  2. Color Selection - Colorblind Accessibility
  3. Typography and Text
  4. Figure Dimensions
  5. Multi-Panel Figures

What it can do on your machine

Read from SKILL.md and the folder at commit 4fb3529. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Scientific Visualization loads about 6.3k tokens when it runs, and up to ~18k if it reads all its reference files. Until then it costs about 53 tokens; SKILL.md has 1,490 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~53
When it runs · the whole SKILL.md, loaded when a task matches
~6.3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~18k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from mims-harvard/OptimusKG at commit 4fb3529, republished under its MIT licence (© mims-harvard). 1,490 words, ~6,323 tokens.

Download SKILL.mdSave it as .claude/skills/scientific-visualization/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
scientific-visualization
description
Create publication figures with matplotlib/seaborn/plotly. Multi-panel layouts, error bars, significance markers, colorblind-safe, export PDF/EPS/TIFF, for journal-ready scientific plots.

Scientific Visualization

Overview

Scientific visualization transforms data into clear, accurate figures for publication. Create journal-ready plots with multi-panel layouts, error bars, significance markers, and colorblind-safe palettes. Export as PDF/EPS/TIFF using matplotlib, seaborn, and plotly for manuscripts.

When to Use This Skill

This skill should be used when:

  • Creating plots or visualizations for scientific manuscripts
  • Preparing figures for journal submission (Nature, Science, Cell, PLOS, etc.)
  • Ensuring figures are colorblind-friendly and accessible
  • Making multi-panel figures with consistent styling
  • Exporting figures at correct resolution and format
  • Following specific publication guidelines
  • Improving existing figures to meet publication standards
  • Creating figures that need to work in both color and grayscale

Quick Start Guide

Basic Publication-Quality Figure
python
import matplotlib.pyplot as plt
import numpy as np

# Apply publication style (from scripts/style_presets.py)
from style_presets import apply_publication_style
apply_publication_style('default')

# Create figure with appropriate size (single column = 3.5 inches)
fig, ax = plt.subplots(figsize=(3.5, 2.5))

# Plot data
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')

# Proper labeling with units
ax.set_xlabel('Time (seconds)')
ax.set_ylabel('Amplitude (mV)')
ax.legend(frameon=False)

# Remove unnecessary spines
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# Save in publication formats (from scripts/figure_export.py)
from figure_export import save_publication_figure
save_publication_figure(fig, 'figure1', formats=['pdf', 'png'], dpi=300)
Using Pre-configured Styles

Apply journal-specific styles using the matplotlib style files in assets/:

python
import matplotlib.pyplot as plt

# Option 1: Use style file directly
plt.style.use('assets/nature.mplstyle')

# Option 2: Use style_presets.py helper
from style_presets import configure_for_journal
configure_for_journal('nature', figure_width='single')

# Now create figures - they'll automatically match Nature specifications
fig, ax = plt.subplots()
# ... your plotting code ...
Quick Start with Seaborn

For statistical plots, use seaborn with publication styling:

python
import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style

# Apply publication style
apply_publication_style('default')
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind')

# Create statistical comparison figure
fig, ax = plt.subplots(figsize=(3.5, 3))
sns.boxplot(data=df, x='treatment', y='response', 
            order=['Control', 'Low', 'High'], palette='Set2', ax=ax)
sns.stripplot(data=df, x='treatment', y='response',
              order=['Control', 'Low', 'High'], 
              color='black', alpha=0.3, size=3, ax=ax)
ax.set_ylabel('Response (μM)')
sns.despine()

# Save figure
from figure_export import save_publication_figure
save_publication_figure(fig, 'treatment_comparison', formats=['pdf', 'png'], dpi=300)

Core Principles and Best Practices

1. Resolution and File Format

Critical requirements (detailed in references/publication_guidelines.md):

  • Raster images (photos, microscopy): 300-600 DPI
  • Line art (graphs, plots): 600-1200 DPI or vector format
  • Vector formats (preferred): PDF, EPS, SVG
  • Raster formats: TIFF, PNG (never JPEG for scientific data)

Implementation:

python
# Use the figure_export.py script for correct settings
from figure_export import save_publication_figure

# Saves in multiple formats with proper DPI
save_publication_figure(fig, 'myfigure', formats=['pdf', 'png'], dpi=300)

# Or save for specific journal requirements
from figure_export import save_for_journal
save_for_journal(fig, 'figure1', journal='nature', figure_type='combination')
2. Color Selection - Colorblind Accessibility

Always use colorblind-friendly palettes (detailed in references/color_palettes.md):

Recommended: Okabe-Ito palette (distinguishable by all types of color blindness):

python
# Option 1: Use assets/color_palettes.py
from color_palettes import OKABE_ITO_LIST, apply_palette
apply_palette('okabe_ito')

# Option 2: Manual specification
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
             '#0072B2', '#D55E00', '#CC79A7', '#000000']
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=okabe_ito)

For heatmaps/continuous data:

  • Use perceptually uniform colormaps: viridis, plasma, cividis
  • Avoid red-green diverging maps (use PuOr, RdBu, BrBG instead)
  • Never use jet or rainbow colormaps

Always test figures in grayscale to ensure interpretability.

3. Typography and Text

Font guidelines (detailed in references/publication_guidelines.md):

  • Sans-serif fonts: Arial, Helvetica, Calibri
  • Minimum sizes at final print size:
    • Axis labels: 7-9 pt
    • Tick labels: 6-8 pt
    • Panel labels: 8-12 pt (bold)
  • Sentence case for labels: "Time (hours)" not "TIME (HOURS)"
  • Always include units in parentheses

Implementation:

python
# Set fonts globally
import matplotlib as mpl
mpl.rcParams['font.family'] = 'sans-serif'
mpl.rcParams['font.sans-serif'] = ['Arial', 'Helvetica']
mpl.rcParams['font.size'] = 8
mpl.rcParams['axes.labelsize'] = 9
mpl.rcParams['xtick.labelsize'] = 7
mpl.rcParams['ytick.labelsize'] = 7
4. Figure Dimensions

Journal-specific widths (detailed in references/journal_requirements.md):

  • Nature: Single 89 mm, Double 183 mm
  • Science: Single 55 mm, Double 175 mm
  • Cell: Single 85 mm, Double 178 mm

Check figure size compliance:

python
from figure_export import check_figure_size

fig = plt.figure(figsize=(3.5, 3))  # 89 mm for Nature
check_figure_size(fig, journal='nature')
5. Multi-Panel Figures

Best practices:

  • Label panels with bold letters: A, B, C (uppercase for most journals, lowercase for Nature)
  • Maintain consistent styling across all panels
  • Align panels along edges where possible
  • Use adequate white space between panels

Example implementation (see references/matplotlib_examples.md for complete code):

python
from string import ascii_uppercase

fig = plt.figure(figsize=(7, 4))
gs = fig.add_gridspec(2, 2, hspace=0.4, wspace=0.4)

ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
# ... create other panels ...

# Add panel labels
for i, ax in enumerate([ax1, ax2, ...]):
    ax.text(-0.15, 1.05, ascii_uppercase[i], transform=ax.transAxes,
            fontsize=10, fontweight='bold', va='top')

Common Tasks

Task 1: Create a Publication-Ready Line Plot

See references/matplotlib_examples.md Example 1 for complete code.

Key steps:

  1. Apply publication style
  2. Set appropriate figure size for target journal
  3. Use colorblind-friendly colors
  4. Add error bars with correct representation (SEM, SD, or CI)
  5. Label axes with units
  6. Remove unnecessary spines
  7. Save in vector format

Using seaborn for automatic confidence intervals:

python
import seaborn as sns
fig, ax = plt.subplots(figsize=(5, 3))
sns.lineplot(data=timeseries, x='time', y='measurement',
             hue='treatment', errorbar=('ci', 95), 
             markers=True, ax=ax)
ax.set_xlabel('Time (hours)')
ax.set_ylabel('Measurement (AU)')
sns.despine()
Task 2: Create a Multi-Panel Figure

See references/matplotlib_examples.md Example 2 for complete code.

Key steps:

  1. Use GridSpec for flexible layout
  2. Ensure consistent styling across panels
  3. Add bold panel labels (A, B, C, etc.)
  4. Align related panels
  5. Verify all text is readable at final size
Task 3: Create a Heatmap with Proper Colormap

See references/matplotlib_examples.md Example 4 for complete code.

Key steps:

  1. Use perceptually uniform colormap (viridis, plasma, cividis)
  2. Include labeled colorbar
  3. For diverging data, use colorblind-safe diverging map (RdBu_r, PuOr)
  4. Set appropriate center value for diverging maps
  5. Test appearance in grayscale

Using seaborn for correlation matrices:

python
import seaborn as sns
fig, ax = plt.subplots(figsize=(5, 4))
corr = df.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
            cmap='RdBu_r', center=0, square=True,
            linewidths=1, cbar_kws={'shrink': 0.8}, ax=ax)
Task 4: Prepare Figure for Specific Journal

Workflow:

  1. Check journal requirements: references/journal_requirements.md
  2. Configure matplotlib for journal:
    python
    from style_presets import configure_for_journal
    configure_for_journal('nature', figure_width='single')
  3. Create figure (will auto-size correctly)
  4. Export with journal specifications:
    python
    from figure_export import save_for_journal
    save_for_journal(fig, 'figure1', journal='nature', figure_type='line_art')
Task 5: Fix an Existing Figure to Meet Publication Standards

Checklist approach (full checklist in references/publication_guidelines.md):

  1. Check resolution: Verify DPI meets journal requirements
  2. Check file format: Use vector for plots, TIFF/PNG for images
  3. Check colors: Ensure colorblind-friendly
  4. Check fonts: Minimum 6-7 pt at final size, sans-serif
  5. Check labels: All axes labeled with units
  6. Check size: Matches journal column width
  7. Test grayscale: Figure interpretable without color
  8. Remove chart junk: No unnecessary grids, 3D effects, shadows
Task 6: Create Colorblind-Friendly Visualizations

Strategy:

  1. Use approved palettes from assets/color_palettes.py
  2. Add redundant encoding (line styles, markers, patterns)
  3. Test with colorblind simulator
  4. Ensure grayscale compatibility

Example:

python
from color_palettes import apply_palette
import matplotlib.pyplot as plt

apply_palette('okabe_ito')

# Add redundant encoding beyond color
line_styles = ['-', '--', '-.', ':']
markers = ['o', 's', '^', 'v']

for i, (data, label) in enumerate(datasets):
    plt.plot(x, data, linestyle=line_styles[i % 4],
             marker=markers[i % 4], label=label)

Statistical Rigor

Always include:

  • Error bars (SD, SEM, or CI - specify which in caption)
  • Sample size (n) in figure or caption
  • Statistical significance markers (*, **, ***)
  • Individual data points when possible (not just summary statistics)

Example with statistics:

python
# Show individual points with summary statistics
ax.scatter(x_jittered, individual_points, alpha=0.4, s=8)
ax.errorbar(x, means, yerr=sems, fmt='o', capsize=3)

# Mark significance
ax.text(1.5, max_y * 1.1, '***', ha='center', fontsize=8)

Working with Different Plotting Libraries

Matplotlib
  • Most control over publication details
  • Best for complex multi-panel figures
  • Use provided style files for consistent formatting
  • See references/matplotlib_examples.md for extensive examples
Seaborn

Seaborn provides a high-level, dataset-oriented interface for statistical graphics, built on matplotlib. It excels at creating publication-quality statistical visualizations with minimal code while maintaining full compatibility with matplotlib customization.

Key advantages for scientific visualization:

  • Automatic statistical estimation and confidence intervals
  • Built-in support for multi-panel figures (faceting)
  • Colorblind-friendly palettes by default
  • Dataset-oriented API using pandas DataFrames
  • Semantic mapping of variables to visual properties
Quick Start with Publication Style

Always apply matplotlib publication styles first, then configure seaborn:

python
import seaborn as sns
import matplotlib.pyplot as plt
from style_presets import apply_publication_style

# Apply publication style
apply_publication_style('default')

# Configure seaborn for publication
sns.set_theme(style='ticks', context='paper', font_scale=1.1)
sns.set_palette('colorblind')  # Use colorblind-safe palette

# Create figure
fig, ax = plt.subplots(figsize=(3.5, 2.5))
sns.scatterplot(data=df, x='time', y='response', 
                hue='treatment', style='condition', ax=ax)
sns.despine()  # Remove top and right spines
Common Plot Types for Publications

Statistical comparisons:

python
# Box plot with individual points for transparency
fig, ax = plt.subplots(figsize=(3.5, 3))
sns.boxplot(data=df, x='treatment', y='response', 
            order=['Control', 'Low', 'High'], palette='Set2', ax=ax)
sns.stripplot(data=df, x='treatment', y='response',
              order=['Control', 'Low', 'High'], 
              color='black', alpha=0.3, size=3, ax=ax)
ax.set_ylabel('Response (μM)')
sns.despine()

Distribution analysis:

python
# Violin plot with split comparison
fig, ax = plt.subplots(figsize=(4, 3))
sns.violinplot(data=df, x='timepoint', y='expression',
               hue='treatment', split=True, inner='quartile', ax=ax)
ax.set_ylabel('Gene Expression (AU)')
sns.despine()

Correlation matrices:

python
# Heatmap with proper colormap and annotations
fig, ax = plt.subplots(figsize=(5, 4))
corr = df.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))  # Show only lower triangle
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
            cmap='RdBu_r', center=0, square=True,
            linewidths=1, cbar_kws={'shrink': 0.8}, ax=ax)
plt.tight_layout()

Time series with confidence bands:

python
# Line plot with automatic CI calculation
fig, ax = plt.subplots(figsize=(5, 3))
sns.lineplot(data=timeseries, x='time', y='measurement',
             hue='treatment', style='replicate',
             errorbar=('ci', 95), markers=True, dashes=False, ax=ax)
ax.set_xlabel('Time (hours)')
ax.set_ylabel('Measurement (AU)')
sns.despine()
Multi-Panel Figures with Seaborn

Using FacetGrid for automatic faceting:

python
# Create faceted plot
g = sns.relplot(data=df, x='dose', y='response',
                hue='treatment', col='cell_line', row='timepoint',
                kind='line', height=2.5, aspect=1.2,
                errorbar=('ci', 95), markers=True)
g.set_axis_labels('Dose (μM)', 'Response (AU)')
g.set_titles('{row_name} | {col_name}')
sns.despine()

# Save with correct DPI
from figure_export import save_publication_figure
save_publication_figure(g.figure, 'figure_facets', 
                       formats=['pdf', 'png'], dpi=300)

Combining seaborn with matplotlib subplots:

python
# Create custom multi-panel layout
fig, axes = plt.subplots(2, 2, figsize=(7, 6))

# Panel A: Scatter with regression
sns.regplot(data=df, x='predictor', y='response', ax=axes[0, 0])
axes[0, 0].text(-0.15, 1.05, 'A', transform=axes[0, 0].transAxes,
                fontsize=10, fontweight='bold')

# Panel B: Distribution comparison
sns.violinplot(data=df, x='group', y='value', ax=axes[0, 1])
axes[0, 1].text(-0.15, 1.05, 'B', transform=axes[0, 1].transAxes,
                fontsize=10, fontweight='bold')

# Panel C: Heatmap
sns.heatmap(correlation_data, cmap='viridis', ax=axes[1, 0])
axes[1, 0].text(-0.15, 1.05, 'C', transform=axes[1, 0].transAxes,
                fontsize=10, fontweight='bold')

# Panel D: Time series
sns.lineplot(data=timeseries, x='time', y='signal', 
             hue='condition', ax=axes[1, 1])
axes[1, 1].text(-0.15, 1.05, 'D', transform=axes[1, 1].transAxes,
                fontsize=10, fontweight='bold')

plt.tight_layout()
sns.despine()
Color Palettes for Publications

Seaborn includes several colorblind-safe palettes:

python
# Use built-in colorblind palette (recommended)
sns.set_palette('colorblind')

# Or specify custom colorblind-safe colors (Okabe-Ito)
okabe_ito = ['#E69F00', '#56B4E9', '#009E73', '#F0E442',
             '#0072B2', '#D55E00', '#CC79A7', '#000000']
sns.set_palette(okabe_ito)

# For heatmaps and continuous data
sns.heatmap(data, cmap='viridis')  # Perceptually uniform
sns.heatmap(corr, cmap='RdBu_r', center=0)  # Diverging, centered
Choosing Between Axes-Level and Figure-Level Functions

Axes-level functions (e.g., scatterplot, boxplot, heatmap):

  • Use when building custom multi-panel layouts
  • Accept ax= parameter for precise placement
  • Better integration with matplotlib subplots
  • More control over figure composition
python
fig, ax = plt.subplots(figsize=(3.5, 2.5))
sns.scatterplot(data=df, x='x', y='y', hue='group', ax=ax)

Figure-level functions (e.g., relplot, catplot, displot):

  • Use for automatic faceting by categorical variables
  • Create complete figures with consistent styling
  • Great for exploratory analysis
  • Use height and aspect for sizing
python
g = sns.relplot(data=df, x='x', y='y', col='category', kind='scatter')
Statistical Rigor with Seaborn

Seaborn automatically computes and displays uncertainty:

python
# Line plot: shows mean ± 95% CI by default
sns.lineplot(data=df, x='time', y='value', hue='treatment',
             errorbar=('ci', 95))  # Can change to 'sd', 'se', etc.

# Bar plot: shows mean with bootstrapped CI
sns.barplot(data=df, x='treatment', y='response',
            errorbar=('ci', 95), capsize=0.1)

# Always specify error type in figure caption:
# "Error bars represent 95% confidence intervals"
Show full SKILL.md (639 more words)Show less
Best Practices for Publication-Ready Seaborn Figures
  1. Always set publication theme first:

    python
    sns.set_theme(style='ticks', context='paper', font_scale=1.1)
  2. Use colorblind-safe palettes:

    python
    sns.set_palette('colorblind')
  3. Remove unnecessary elements:

    python
    sns.despine()  # Remove top and right spines
  4. Control figure size appropriately:

    python
    # Axes-level: use matplotlib figsize
    fig, ax = plt.subplots(figsize=(3.5, 2.5))
    
    # Figure-level: use height and aspect
    g = sns.relplot(..., height=3, aspect=1.2)
  5. Show individual data points when possible:

    python
    sns.boxplot(...)  # Summary statistics
    sns.stripplot(..., alpha=0.3)  # Individual points
  6. Include proper labels with units:

    python
    ax.set_xlabel('Time (hours)')
    ax.set_ylabel('Expression (AU)')
  7. Export at correct resolution:

    python
    from figure_export import save_publication_figure
    save_publication_figure(fig, 'figure_name', 
                           formats=['pdf', 'png'], dpi=300)
Advanced Seaborn Techniques

Pairwise relationships for exploratory analysis:

python
# Quick overview of all relationships
g = sns.pairplot(data=df, hue='condition', 
                 vars=['gene1', 'gene2', 'gene3'],
                 corner=True, diag_kind='kde', height=2)

Hierarchical clustering heatmap:

python
# Cluster samples and features
g = sns.clustermap(expression_data, method='ward', 
                   metric='euclidean', z_score=0,
                   cmap='RdBu_r', center=0, 
                   figsize=(10, 8), 
                   row_colors=condition_colors,
                   cbar_kws={'label': 'Z-score'})

Joint distributions with marginals:

python
# Bivariate distribution with context
g = sns.jointplot(data=df, x='gene1', y='gene2',
                  hue='treatment', kind='scatter',
                  height=6, ratio=4, marginal_kws={'kde': True})
Common Seaborn Issues and Solutions

Issue: Legend outside plot area

python
g = sns.relplot(...)
g._legend.set_bbox_to_anchor((0.9, 0.5))

Issue: Overlapping labels

python
plt.xticks(rotation=45, ha='right')
plt.tight_layout()

Issue: Text too small at final size

python
sns.set_context('paper', font_scale=1.2)  # Increase if needed
Additional Resources

For more detailed seaborn information, see:

  • scientific-packages/seaborn/SKILL.md - Comprehensive seaborn documentation
  • scientific-packages/seaborn/references/examples.md - Practical use cases
  • scientific-packages/seaborn/references/function_reference.md - Complete API reference
  • scientific-packages/seaborn/references/objects_interface.md - Modern declarative API
Plotly
  • Interactive figures for exploration
  • Export static images for publication
  • Configure for publication quality:
python
fig.update_layout(
    font=dict(family='Arial, sans-serif', size=10),
    plot_bgcolor='white',
    # ... see matplotlib_examples.md Example 8
)
fig.write_image('figure.png', scale=3)  # scale=3 gives ~300 DPI

Resources

References Directory

Load these as needed for detailed information:

  • publication_guidelines.md: Comprehensive best practices

    • Resolution and file format requirements
    • Typography guidelines
    • Layout and composition rules
    • Statistical rigor requirements
    • Complete publication checklist
  • color_palettes.md: Color usage guide

    • Colorblind-friendly palette specifications with RGB values
    • Sequential and diverging colormap recommendations
    • Testing procedures for accessibility
    • Domain-specific palettes (genomics, microscopy)
  • journal_requirements.md: Journal-specific specifications

    • Technical requirements by publisher
    • File format and DPI specifications
    • Figure dimension requirements
    • Quick reference table
  • matplotlib_examples.md: Practical code examples

    • 10 complete working examples
    • Line plots, bar plots, heatmaps, multi-panel figures
    • Journal-specific figure examples
    • Tips for each library (matplotlib, seaborn, plotly)
Scripts Directory

Use these helper scripts for automation:

  • figure_export.py: Export utilities

    • save_publication_figure(): Save in multiple formats with correct DPI
    • save_for_journal(): Use journal-specific requirements automatically
    • check_figure_size(): Verify dimensions meet journal specs
    • Run directly: python scripts/figure_export.py for examples
  • style_presets.py: Pre-configured styles

    • apply_publication_style(): Apply preset styles (default, nature, science, cell)
    • set_color_palette(): Quick palette switching
    • configure_for_journal(): One-command journal configuration
    • Run directly: python scripts/style_presets.py to see examples
Assets Directory

Use these files in figures:

  • color_palettes.py: Importable color definitions

    • All recommended palettes as Python constants
    • apply_palette() helper function
    • Can be imported directly into notebooks/scripts
  • Matplotlib style files: Use with plt.style.use()

    • publication.mplstyle: General publication quality
    • nature.mplstyle: Nature journal specifications
    • presentation.mplstyle: Larger fonts for posters/slides

Workflow Summary

Recommended workflow for creating publication figures:

  1. Plan: Determine target journal, figure type, and content
  2. Configure: Apply appropriate style for journal
    python
    from style_presets import configure_for_journal
    configure_for_journal('nature', 'single')
  3. Create: Build figure with proper labels, colors, statistics
  4. Verify: Check size, fonts, colors, accessibility
    python
    from figure_export import check_figure_size
    check_figure_size(fig, journal='nature')
  5. Export: Save in required formats
    python
    from figure_export import save_for_journal
    save_for_journal(fig, 'figure1', 'nature', 'combination')
  6. Review: View at final size in manuscript context

Common Pitfalls to Avoid

  1. Font too small: Text unreadable when printed at final size
  2. JPEG format: Never use JPEG for graphs/plots (creates artifacts)
  3. Red-green colors: ~8% of males cannot distinguish
  4. Low resolution: Pixelated figures in publication
  5. Missing units: Always label axes with units
  6. 3D effects: Distorts perception, avoid completely
  7. Chart junk: Remove unnecessary gridlines, decorations
  8. Truncated axes: Start bar charts at zero unless scientifically justified
  9. Inconsistent styling: Different fonts/colors across figures in same manuscript
  10. No error bars: Always show uncertainty

Final Checklist

Before submitting figures, verify:

  • Resolution meets journal requirements (300+ DPI)
  • File format is correct (vector for plots, TIFF for images)
  • Figure size matches journal specifications
  • All text readable at final size (≥6 pt)
  • Colors are colorblind-friendly
  • Figure works in grayscale
  • All axes labeled with units
  • Error bars present with definition in caption
  • Panel labels present and consistent
  • No chart junk or 3D effects
  • Fonts consistent across all figures
  • Statistical significance clearly marked
  • Legend is clear and complete

Use this skill to ensure scientific figures meet the highest publication standards while remaining accessible to all readers.

© mims-harvard, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 10 other files (scripts, references, assets) in .agents/skills/scientific-visualization of mims-harvard/OptimusKG.

  • SKILL.md
  • assets/color_palettes.py
  • assets/nature.mplstyle
  • assets/presentation.mplstyle
  • assets/publication.mplstyle
  • references/color_palettes.md
  • references/journal_requirements.md
  • references/matplotlib_examples.md
  • references/publication_guidelines.md
  • scripts/figure_export.py
  • scripts/style_presets.py

Open the folder on GitHubat commit 4fb3529

Used in 19 other repositories

We found 23 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 19 other GitHub owners. This page covers the copy in mims-harvard/OptimusKG, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Scientific Visualization next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Scientific Visualization compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Scientific Visualization this skillmims-harvard/OptimusKG14619 repos~6.3kAutomated safety check: PassMIT
MatplotlibzLanqing/codex-claude-academic-skills4.6k17 repos~2.9kAutomated safety check: PassMIT
SeabornzLanqing/codex-claude-academic-skills4.6k16 repos~4.9kAutomated safety check: PassBSD-3-Clause
CJK Font Setup for Plotsxjtulyc/MedgeClaw6171 repos~1.3kAutomated safety check: PassNone
Tufte Data Vizcaylent/tufte-data-viz222—~3.5kAutomated safety check: PassMIT
Scientific VisualizationOleafly/Oleafly205—~3.4kAutomated safety check: NotesMIT

Similar skills

  • Matplotlib

    zLanqing/codex-claude-academic-skills

    Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 17 repos~2.9k tokens
    Data & AnalyticsAuto-check passed
  • Seaborn

    zLanqing/codex-claude-academic-skills

    Statistical visualization with pandas integration. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 16 repos~4.9k tokens
    Data & AnalyticsAuto-check passed
  • CJK Font Setup for Plots

    xjtulyc/MedgeClaw

    Detects a usable Chinese, Japanese or Korean font and configures matplotlib so chart labels, titles and legends render instead of showing empty boxes.

    617 GitHub starsUsed in 1 repo~1.3k tokens
    Data & AnalyticsAuto-check passed
  • Tufte Data Viz

    caylent/tufte-data-viz

    A skill your agent uses when creating, reviewing, or styling charts, graphs, dashboards, sparklines, or any data visualization.

    222 GitHub stars~3.5k tokensUpdated 7 mo ago
    Data & AnalyticsAuto-check passed
  • Create and audit truthful, accessible, publication-ready scientific figures with Matplotlib, Seaborn, or Plotly.

    205 GitHub stars~3.4k tokensUpdated today
    Data & AnalyticsAuto-check: notes
  • Chart Type Selection Guide

    pipeshub-ai/pipeshub-ai

    Picks the right chart type for a data question and applies readability rules like axis labels, colorblind palettes and legend restraint.

    3.8k GitHub stars~1.1k tokensUpdated today
    Data & AnalyticsAuto-check passed

More from mims-harvard/OptimusKG

  • Impeccable

    mims-harvard/OptimusKG

    Create distinctive, production-grade frontend interfaces with high design quality.

    146 GitHub starsUsed in 3 repos~5.5k tokens
    Auto-check passed
  • Node Catalog Sync

    mims-harvard/OptimusKG

    Enforce synchronization between Kedro node files and catalog YAML files in the OptimusKG project.

    146 GitHub stars~823 tokensUpdated 15 days ago
    Auto-check passed
  • Optimuskg

    mims-harvard/OptimusKG

    Guide for using OptimusKG, the biomedical knowledge graph, through the optimuskg Python client.

    146 GitHub stars~1.9k tokensUpdated 15 days ago
    Auto-check passed

Questions about Scientific Visualization

What does Scientific Visualization do?

Create publication figures with matplotlib/seaborn/plotly. An agent skill from mims-harvard/OptimusKG. Scientific Visualization is an agent skill from mims-harvard/OptimusKG. Create publication figures with matplotlib/seaborn/plotly.

When should I use Scientific Visualization?

Scientific Visualization fits situations like: tasks that involve Data visualization.

How do I install Scientific Visualization in Claude Code?

Run `npx skills add mims-harvard/OptimusKG --skill scientific-visualization -a claude-code`. Or copy the skill folder (.agents/skills/scientific-visualization in mims-harvard/OptimusKG) into .claude/skills/scientific-visualization in your project. Claude Code loads it when a task matches its description.

How do I install Scientific Visualization in Codex?

Run `npx skills add mims-harvard/OptimusKG --skill scientific-visualization -a codex`. Or copy the skill folder (.agents/skills/scientific-visualization in mims-harvard/OptimusKG) into .agents/skills/scientific-visualization in your project. Codex loads it when a task matches its description.

Can I use Scientific Visualization in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mims-harvard/OptimusKG --skill scientific-visualization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scientific-visualization, .gemini/skills/scientific-visualization, .github/skills/scientific-visualization and .opencode/skills/scientific-visualization in your project.

What does Scientific Visualization need to run?

Going by SKILL.md and its folder, Scientific Visualization needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python 3.

Does Scientific Visualization access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Scientific Visualization safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Scientific Visualization use?

Scientific Visualization is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Scientific Visualization use?

About 6.3k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.

What are the alternatives to Scientific Visualization?

Skills that share tags, products or a category with Scientific Visualization: Matplotlib (zLanqing/codex-claude-academic-skills, 4.6k stars), Seaborn (zLanqing/codex-claude-academic-skills, 4.6k stars), CJK Font Setup for Plots (xjtulyc/MedgeClaw, 617 stars) and Tufte Data Viz (caylent/tufte-data-viz, 222 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Scientific Visualization?

mims-harvard (a GitHub organization) maintains it in mims-harvard/OptimusKG, which has 146 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 21, 2026.

Source: mims-harvard/OptimusKG on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.