Matplotlib
Overview
Matplotlib is Python's foundational visualization library for creating static, animated, and interactive plots. This skill provides guidance on using matplotlib effectively, covering both the pyplot interface (MATLAB-style) and the object-oriented API (Figure/Axes), along with best practices for creating publication-quality visualizations.
When to Use This Skill
This skill should be used when:
- Creating any type of plot or chart (line, scatter, bar, histogram, heatmap, contour, etc.)
- Generating scientific or statistical visualizations
- Customizing plot appearance (colors, styles, labels, legends)
- Creating multi-panel figures with subplots
- Exporting visualizations to various formats (PNG, PDF, SVG, etc.)
- Building interactive plots or animations
- Working with 3D visualizations
- Integrating plots into Jupyter notebooks or GUI applications
Core Concepts
The Matplotlib Hierarchy
Matplotlib uses a hierarchical structure of objects:
- Figure - The top-level container for all plot elements
- Axes - The actual plotting area where data is displayed (one Figure can contain multiple Axes)
- Artist - Everything visible on the figure (lines, text, ticks, etc.)
- Axis - The number line objects (x-axis, y-axis) that handle ticks and labels
Two Interfaces
1. pyplot Interface (Implicit, MATLAB-style)
- Convenient for quick, simple plots
- Maintains state automatically
- Good for interactive work and simple scripts
2. Object-Oriented Interface (Explicit)
- Recommended for most use cases
- More explicit control over figure and axes
- Better for complex figures with multiple subplots
- Easier to maintain and debug
Common Workflows
1. Basic Plot Creation
Single plot workflow:
2. Multiple Subplots
Creating subplot layouts:
3. Plot Types and Use Cases
Line plots - Time series, continuous data, trends
Scatter plots - Relationships between variables, correlations
Bar charts - Categorical comparisons
Histograms - Distributions
Heatmaps - Matrix data, correlations
Contour plots - 3D data on 2D plane
Box plots - Statistical distributions
Violin plots - Distribution densities
For comprehensive plot type examples and variations, refer to references/plot_types.md.
4. Styling and Customization
Color specification methods:
- Named colors:
'red','blue','steelblue' - Hex codes:
'#FF5733' - RGB tuples:
(0.1, 0.2, 0.3) - Colormaps:
cmap='viridis',cmap='plasma',cmap='coolwarm'
Using style sheets:
Customizing with rcParams:
Text and annotations:
For detailed styling options and colormap guidelines, see references/styling_guide.md.
5. Saving Figures
Export to various formats:
Important parameters:
dpi: Resolution (300 for publications, 150 for web, 72 for screen)bbox_inches='tight': Removes excess whitespacefacecolor='white': Ensures white background (useful for transparent themes)transparent=True: Transparent background
6. Working with 3D Plots
Best Practices
1. Interface Selection
- Use the object-oriented interface (fig, ax = plt.subplots()) for production code
- Reserve pyplot interface for quick interactive exploration only
- Always create figures explicitly rather than relying on implicit state
2. Figure Size and DPI
- Set figsize at creation:
fig, ax = plt.subplots(figsize=(10, 6)) - Use appropriate DPI for output medium:
- Screen/notebook: 72-100 dpi
- Web: 150 dpi
- Print/publications: 300 dpi
3. Layout Management
- Use
constrained_layout=Trueortight_layout()to prevent overlapping elements fig, ax = plt.subplots(constrained_layout=True)is recommended for automatic spacing
4. Colormap Selection
- Sequential (viridis, plasma, inferno): Ordered data with consistent progression
- Diverging (coolwarm, RdBu): Data with meaningful center point (e.g., zero)
- Qualitative (tab10, Set3): Categorical/nominal data
- Avoid rainbow colormaps (jet) - they are not perceptually uniform
5. Accessibility
- Use colorblind-friendly colormaps (viridis, cividis)
- Add patterns/hatching for bar charts in addition to colors
- Ensure sufficient contrast between elements
- Include descriptive labels and legends
6. Performance
- For large datasets, use
rasterized=Truein plot calls to reduce file size - Use appropriate data reduction before plotting (e.g., downsample dense time series)
- For animations, use blitting for better performance
7. Code Organization
Quick Reference Scripts
This skill includes helper scripts in the scripts/ directory:
plot_template.py
Template script demonstrating various plot types with best practices. Use this as a starting point for creating new visualizations.
Usage:
style_configurator.py
Interactive utility to configure matplotlib style preferences and generate custom style sheets.
Usage:
Detailed References
For comprehensive information, consult the reference documents:
references/plot_types.md- Complete catalog of plot types with code examples and use casesreferences/styling_guide.md- Detailed styling options, colormaps, and customizationreferences/api_reference.md- Core classes and methods referencereferences/common_issues.md- Troubleshooting guide for common problems
Integration with Other Tools
Matplotlib integrates well with:
- NumPy/Pandas - Direct plotting from arrays and DataFrames
- Seaborn - High-level statistical visualizations built on matplotlib
- Jupyter - Interactive plotting with
%matplotlib inlineor%matplotlib widget - GUI frameworks - Embedding in Tkinter, Qt, wxPython applications
Common Gotchas
- Overlapping elements: Use
constrained_layout=Trueortight_layout() - State confusion: Use OO interface to avoid pyplot state machine issues
- Memory issues with many figures: Close figures explicitly with
plt.close(fig) - Font warnings: Install fonts or suppress warnings with
plt.rcParams['font.sans-serif'] - DPI confusion: Remember that figsize is in inches, not pixels:
pixels = dpi * inches
Additional Resources
- Official documentation: https://matplotlib.org/
- Gallery: https://matplotlib.org/stable/gallery/index.html
- Cheatsheets: https://matplotlib.org/cheatsheets/
- Tutorials: https://matplotlib.org/stable/tutorials/index.html

