
Seaborn
Generate publication-ready seaborn and matplotlib plots for EDA, correlations, and multi-panel figures from pandas DataFrames.
Overview
Seaborn is an agent skill most often used in Build (also Validate prototype, Grow analytics) that teaches pandas-backed seaborn and matplotlib patterns for EDA, correlations, and publication figures.
Install
npx skills add https://github.com/davila7/claude-code-templates --skill seabornWhat is this skill?
- Pairplot and displot/kde patterns for quick dataset overview and faceted distributions
- Masked correlation heatmaps with annot, coolwarm cmap, and numeric dtype selection
- Publication-style multi-panel figures with shared seaborn styling conventions
- Savefig examples at 300 DPI with tight bbox for shareable outputs
Adoption & trust: 520 installs on skills.sh; 27.8k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have tabular data but keep rewriting the same seaborn pairplots, faceted distributions, and heatmaps from scratch in every notebook or script.
Who is it for?
Indie builders and small teams shipping Python data features, notebooks, or internal reports who want agent-generated plots that match common seaborn idioms.
Skip if: Dashboard-only stacks (Plotly/Dash/Streamlit widgets) or pipelines that never touch Python visualization—skip when charts are owned entirely by a BI tool.
When should I use this skill?
You are writing Python EDA, correlation analysis, or publication-style multi-panel figures with seaborn and pandas.
What do I get? / Deliverables
Your agent emits ready-to-run seaborn blocks with faceting, masking, styling, and savefig settings so you get consistent overview and correlation artifacts in one pass.
- Runnable seaborn/matplotlib code blocks
- Exported figure files (e.g. overview.png) with DPI and bbox settings
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Canonical shelf is Build because the skill is code-first visualization you wire into notebooks, backends, and reports—not a standalone growth analytics product. Backend fits data-heavy apps and analysis scripts that produce artifacts (PNG exports, pairplots, heatmaps) alongside application logic.
Where it fits
Sketch distributions and correlations on a sample CSV before committing to a scoring feature.
Add a nightly job that writes overview and correlation PNGs from warehouse exports.
Regenerate faceted kde plots when comparing cohorts or experiment arms in a notebook.
Visualize open datasets while sizing whether a niche analytics tool is worth building.
How it compares
Use as a matplotlib/seaborn recipe skill in your repo—not a hosted charting MCP or no-code analytics product.
Common Questions / FAQ
Who is seaborn for?
Solo and indie builders using Claude Code, Cursor, or Codex on Python projects who need fast, correct seaborn examples for EDA and report figures.
When should I use seaborn?
During Validate when prototyping on sample data, during Build when writing analysis or backend export jobs, and during Grow when exploring product or funnel metrics in notebooks.
Is seaborn safe to install?
Treat it like any third-party skill: review the Security Audits panel on this Prism page and inspect the skill bundle before letting an agent run code against your datasets.
SKILL.md
READMESKILL.md - Seaborn
# Seaborn Common Use Cases and Examples This document provides practical examples for common data visualization scenarios using seaborn. ## Exploratory Data Analysis ### Quick Dataset Overview ```python import seaborn as sns import matplotlib.pyplot as plt import pandas as pd # Load data df = pd.read_csv('data.csv') # Pairwise relationships for all numeric variables sns.pairplot(df, hue='target_variable', corner=True, diag_kind='kde') plt.suptitle('Dataset Overview', y=1.01) plt.savefig('overview.png', dpi=300, bbox_inches='tight') ``` ### Distribution Exploration ```python # Multiple distributions across categories g = sns.displot( data=df, x='measurement', hue='condition', col='timepoint', kind='kde', fill=True, height=3, aspect=1.5, col_wrap=3, common_norm=False ) g.set_axis_labels('Measurement Value', 'Density') g.set_titles('{col_name}') ``` ### Correlation Analysis ```python # Compute correlation matrix corr = df.select_dtypes(include='number').corr() # Create mask for upper triangle mask = np.triu(np.ones_like(corr, dtype=bool)) # Plot heatmap fig, ax = plt.subplots(figsize=(10, 8)) sns.heatmap( corr, mask=mask, annot=True, fmt='.2f', cmap='coolwarm', center=0, square=True, linewidths=1, cbar_kws={'shrink': 0.8} ) plt.title('Correlation Matrix') plt.tight_layout() ``` ## Scientific Publications ### Multi-Panel Figure with Different Plot Types ```python # Set publication style sns.set_theme(style='ticks', context='paper', font_scale=1.1) sns.set_palette('colorblind') # Create figure with custom layout fig = plt.figure(figsize=(12, 8)) gs = fig.add_gridspec(2, 3, hspace=0.3, wspace=0.3) # Panel A: Time series ax1 = fig.add_subplot(gs[0, :2]) sns.lineplot( data=timeseries_df, x='time', y='expression', hue='gene', style='treatment', markers=True, dashes=False, ax=ax1 ) ax1.set_title('A. Gene Expression Over Time', loc='left', fontweight='bold') ax1.set_xlabel('Time (hours)') ax1.set_ylabel('Expression Level (AU)') # Panel B: Distribution comparison ax2 = fig.add_subplot(gs[0, 2]) sns.violinplot( data=expression_df, x='treatment', y='expression', inner='box', ax=ax2 ) ax2.set_title('B. Expression Distribution', loc='left', fontweight='bold') ax2.set_xlabel('Treatment') ax2.set_ylabel('') # Panel C: Correlation ax3 = fig.add_subplot(gs[1, 0]) sns.scatterplot( data=correlation_df, x='gene1', y='gene2', hue='cell_type', alpha=0.6, ax=ax3 ) sns.regplot( data=correlation_df, x='gene1', y='gene2', scatter=False, color='black', ax=ax3 ) ax3.set_title('C. Gene Correlation', loc='left', fontweight='bold') ax3.set_xlabel('Gene 1 Expression') ax3.set_ylabel('Gene 2 Expression') # Panel D: Heatmap ax4 = fig.add_subplot(gs[1, 1:]) sns.heatmap( sample_matrix, cmap='RdBu_r', center=0, annot=True, fmt='.1f', cbar_kws={'label': 'Log2 Fold Change'}, ax=ax4 ) ax4.set_title('D. Treatment Effects', loc='left', fontweight='bold') ax4.set_xlabel('Sample') ax4.set_ylabel('Gene') # Clean up sns.despine() plt.savefig('figure.pdf', dpi=300, bbox_inches='tight') plt.savefig('figure.png', dpi=300, bbox_inches='tight') ``` ### Box Plot with Significance Annotations ```python import numpy as np from scipy import stats # Create plot fig, ax = plt.subplots(figsize=(8, 6)) sns.boxplot( data=df, x='treatment', y='response', order=['Control', 'Low', 'Medium', 'High'], palette='Set2', ax=ax ) # Add individual points sns.stripplot( data=df, x='treatment', y='response', order=['Control', 'Low', 'Medium', 'High'], color='black', alpha=0.3, size=3, ax=ax ) # Add significance bars def add_significance_bar(ax, x1, x2, y, h, text): ax.plot([x1, x1, x2, x2], [y, y+h, y+h, y], 'k-', lw=1.5) ax.text((x1+x2)/2, y+h, text, ha='center', va='bottom') y_max = df['response'].max() add_si