Matplotlib Best Practices
Expert guidelines for Matplotlib development, focusing on data visualization, plotting, and creating publication-quality figures.
Code Style and Structure
- •Write concise, technical Python code with accurate Matplotlib examples
- •Create informative and visually appealing plots with proper labels, titles, and legends
- •Use the object-oriented API for complex figures, pyplot for quick plots
- •Follow PEP 8 style guidelines
- •Consider color-blindness accessibility in all visualizations
API Approaches
Object-Oriented Interface (Recommended)
- •Use
fig, ax = plt.subplots()for explicit control - •Preferred for complex figures and production code
- •Methods are called on axes objects:
ax.plot(),ax.set_xlabel() - •Enables multiple subplots and fine-grained customization
Pyplot Interface
- •Use
plt.plot(),plt.xlabel()for quick, interactive plots - •Suitable for Jupyter notebooks and exploration
- •Use
%matplotlib inlinein Jupyter notebooks
Creating Effective Visualizations
Plot Types and Selection
- •Line plots (
ax.plot()) for continuous data and trends - •Scatter plots (
ax.scatter()) for relationship between variables - •Bar plots (
ax.bar(),ax.barh()) for categorical comparisons - •Histograms (
ax.hist()) for distributions - •Box plots (
ax.boxplot()) for statistical summaries - •Heatmaps (
ax.imshow(),ax.pcolormesh()) for 2D data
Labels and Annotations
- •Always include axis labels with units
- •Use descriptive titles that convey the message
- •Add legends when multiple series are present
- •Use annotations (
ax.annotate()) to highlight key points - •Include data source attribution when appropriate
Color and Style
- •Use colorblind-friendly palettes (e.g., 'viridis', 'plasma', 'cividis')
- •Avoid red-green combinations for accessibility
- •Use consistent colors for the same categories across figures
- •Use appropriate colormaps for data type:
- •Sequential: 'viridis', 'plasma' for continuous data
- •Diverging: 'RdBu', 'coolwarm' for data with meaningful center
- •Qualitative: 'Set1', 'tab10' for categorical data
Figure Layout and Composition
Subplots
- •Use
plt.subplots(nrows, ncols)for grid layouts - •Use
gridspecfor complex, non-uniform layouts - •Share axes with
sharex=True,sharey=Truefor comparison - •Use
constrained_layout=Trueortight_layout()to prevent overlap
Figure Size and Resolution
- •Set figure size explicitly:
figsize=(width, height)in inches - •Use appropriate DPI for intended output (72 screen, 300+ print)
- •Standard sizes: (10, 6) for presentations, (8, 6) for papers
Customization
Style Sheets
- •Use built-in styles:
plt.style.use('seaborn-v0_8'),'ggplot' - •Create custom style files for consistent branding
- •Combine styles:
plt.style.use(['seaborn-v0_8', 'custom.mplstyle'])
Text and Fonts
- •Use LaTeX for mathematical notation:
r'$\alpha = \frac{1}{2}$' - •Set font family for consistency
- •Adjust font sizes for readability at intended display size
Saving and Exporting
File Formats
- •Use vector formats (PDF, SVG, EPS) for publications
- •Use PNG for web and presentations with transparency
- •Use JPEG only for photographs (lossy compression)
Export Settings
- •Use
bbox_inches='tight'to remove excess whitespace - •Set
facecolorfor background color - •Specify
dpiappropriate for use case - •Use
transparent=Truefor overlays
Performance Optimization
- •Use
rasterized=Truefor scatter plots with many points - •Consider downsampling data for visualization
- •Close figures with
plt.close()after saving - •Use
plt.close('all')in loops creating many figures
Key Conventions
- •Import as
import matplotlib.pyplot as plt - •Use object-oriented API for production code
- •Always label axes and include units
- •Test visualizations at intended display size
- •Consider accessibility in color choices