Matplotlib
Comprehensive library for creating static, animated, and interactive visualizations
Our View
Matplotlib is the foundational plotting library for Python, offering complete control over every aspect of your figures. It's publication-ready out of the box and integrates seamlessly with NumPy and Pandas, making it essential for visualizing research data.
Provisional positions are editorial proposals awaiting group review.
Teaching — Recorded in topic offerings; consult the dated event links for availability.
6 topics with recorded teaching · 15 past offerings · 4 upcoming offerings
Related themes: Neural Data AnalysisScientific Computing
Related topics: AI-Assisted Software DevelopmentArrays and Numerical ComputingDataframes and StatisticsDeveloper EnvironmentLocal Field Potential (LFP) Analysis(M)EEG AnalysisNeural Spike Analysis
Common use cases
- Create publication-quality figures for papers
- Visualize neural signals (spike rasters, LFPs, calcium traces)
- Plot behavioral data and experimental results
- Generate time series, histograms, heatmaps, and more
Getting started
Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. It provides MATLAB-like plotting while giving you complete control over every element of your figures.
Why Matplotlib?
- Publication Ready: High-quality figures suitable for papers
- Complete Control: Fine-tune every aspect of your plots
- Versatile: Line plots, scatter plots, bar charts, heatmaps, 3D plots, and more
- Integration: Works seamlessly with NumPy and Pandas
- Standard: The foundation for many other plotting libraries
Key Features
Basic Plotting
import matplotlib.pyplot as plt
import numpy as np
# Simple line plot
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure(figsize=(10, 4))
plt.plot(x, y)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Sine Wave')
plt.show()
Multiple Subplots
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].plot(x, np.sin(x))
axes[0, 1].plot(x, np.cos(x))
axes[1, 0].hist(np.random.randn(1000))
axes[1, 1].scatter(x, np.random.randn(100))
Common Plot Types
- Line plots: Time series, signals
- Scatter plots: Correlations, relationships
- Histograms: Distributions
- Bar charts: Comparisons across conditions
- Heatmaps: Matrix data, correlation matrices
- Raster plots: Spike trains
- Error bars: Show variability
Common Use Cases in Neuroscience
- Electrophysiology: Plot LFPs, spike rasters, PSTHs
- Calcium Imaging: Visualize fluorescence traces
- Behavioral Analysis: Show reaction times, accuracy across conditions
- Spectrograms: Time-frequency representations
- Connectivity: Visualize correlation matrices
Getting Started
Install Matplotlib:
conda install matplotlib
# or
pip install matplotlib
Basic example:
import matplotlib.pyplot as plt
import numpy as np
# Generate sample neural data
time = np.linspace(0, 2, 1000)
signal = np.sin(2 * np.pi * 10 * time) + 0.5 * np.random.randn(1000)
# Create figure
plt.figure(figsize=(12, 4))
plt.plot(time, signal, linewidth=0.5)
plt.xlabel('Time (s)')
plt.ylabel('Voltage (mV)')
plt.title('Simulated LFP Signal')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('lfp_signal.png', dpi=300)
plt.show()
Tips
- Use
plt.style.use('seaborn')for nicer default styles - Always label axes and add titles for clarity
- Use
plt.tight_layout()to prevent overlapping labels - Save high-resolution figures with
plt.savefig('figure.png', dpi=300) - Create reusable figure templates for consistency
- Learn to use
figandaxobjects for more control - Use colormaps thoughtfully (consider colorblind-friendly options)