Seaborn

Statistical data visualization library built on Matplotlib

Interactive Visualization & Exploration Intermediate Visualization Recommend Provisional Teaching

Our View

Recommend Provisional Teaching

Seaborn makes it easy to create beautiful, informative statistical graphics with minimal code. It provides high-level functions for common statistical plots and works seamlessly with Pandas DataFrames, making exploratory analysis faster and more intuitive than raw Matplotlib.

Provisional positions are editorial proposals awaiting group review.

Teaching — Recorded in topic offerings; consult the dated event links for availability.

2 topics with recorded teaching · 10 past offerings · 0 upcoming offerings

Related themes: Scientific Computing

Related topics: Arrays and Numerical ComputingDataframes and Statistics

Common use cases

  • Visualize distributions and statistical relationships
  • Create publication-ready figures with minimal code
  • Explore correlations and patterns in experimental data
  • Generate complex multi-panel figures easily

Getting started

Seaborn is a Python visualization library based on Matplotlib that provides a high-level interface for drawing attractive and informative statistical graphics. It’s designed to work well with Pandas DataFrames and makes complex plots simple.

Why Seaborn?

  • Beautiful Defaults: Professional-looking plots out of the box
  • Statistical Focus: Built-in support for statistical visualizations
  • DataFrame Integration: Works naturally with Pandas
  • Less Code: Complex plots with simple function calls
  • Themes: Consistent, attractive styling

Key Plot Types

Distribution Plots

import seaborn as sns
import pandas as pd

# Histogram with KDE
sns.histplot(data=df, x='reaction_time', kde=True)

# Box and violin plots
sns.boxplot(data=df, x='condition', y='reaction_time')
sns.violinplot(data=df, x='condition', y='reaction_time')

Relationship Plots

# Scatter with regression line
sns.regplot(data=df, x='age', y='performance')

# Scatter matrix
sns.pairplot(data=df, hue='group')

# Correlation heatmap
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')

Categorical Plots

# Bar plot with error bars
sns.barplot(data=df, x='condition', y='accuracy', errorbar='se')

# Point plot for trends
sns.pointplot(data=df, x='session', y='performance', hue='group')

# Count plot
sns.countplot(data=df, x='response_type')

Multi-Panel Figures

# FacetGrid for subplots by category
g = sns.FacetGrid(df, col='subject', row='condition')
g.map(sns.histplot, 'reaction_time')

Common Use Cases in Research

Behavioral Analysis

  • Compare reaction times across conditions
  • Visualize learning curves over sessions
  • Show accuracy distributions by group
  • Display trial-by-trial performance

Neural Data

  • Compare firing rates across neurons/conditions
  • Visualize spike count distributions
  • Show calcium signal amplitudes
  • Plot correlation matrices for neural populations

Experimental Results

  • Show group differences with confidence intervals
  • Display longitudinal measurements
  • Visualize multi-factor experiments
  • Create publication-ready summary figures

Getting Started

Install Seaborn:

conda install seaborn
# or
pip install seaborn

Basic example:

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# Set theme
sns.set_theme(style='whitegrid')

# Sample data
df = pd.DataFrame({
    'condition': ['A', 'B'] * 50,
    'reaction_time': np.random.normal([0.5, 0.6], 0.1, 100)
})

# Create plot
sns.violinplot(data=df, x='condition', y='reaction_time')
plt.ylabel('Reaction Time (s)')
plt.title('Reaction Times by Condition')
plt.show()

Seaborn Themes

Apply consistent styling:

# Built-in themes
sns.set_theme(style='darkgrid')  # Grid background
sns.set_theme(style='whitegrid')  # White with grid
sns.set_theme(style='dark')       # Dark background
sns.set_theme(style='white')      # Clean white
sns.set_theme(style='ticks')      # With tick marks

# Customize
sns.set_theme(
    context='paper',  # or 'notebook', 'talk', 'poster'
    palette='deep',    # Color palette
    font_scale=1.2     # Scale all fonts
)

Tips

  • Use sns.set_theme() at the start of your notebook
  • Combine with Matplotlib for fine-tuning
  • Use hue, size, style parameters to show additional variables
  • Try sns.pairplot() for quick exploratory analysis
  • Use errorbar='se' or errorbar='sd' for error bars
  • Save color palettes for consistency: pal = sns.color_palette('Set2')
  • Use sns.despine() to remove chart borders