Matplotlib — Publication-Quality Figures for Researchers

The Python plotting library that produces the figures you see in top journals. Learn to create publication-quality graphs, animations, and scientific visualisations with Matplotlib.

Category Figures
Pricing Free
Rating ★★★★☆ (4/5)

Why Matplotlib Is Still the Standard

Despite the rise of Seaborn, Plotly, and Altair, Matplotlib remains the tool you need to know for academic publishing. Every journal has figure requirements (DPI, font size, line weight, column width) and Matplotlib is the most direct way to meet them precisely.

Seaborn and Plotly are excellent for exploratory analysis. Matplotlib is what you use when you need the final, camera-ready figure.

Publication-Ready in 5 Steps

  1. Set figure size to match your journal’s column width — single-column figures are typically 3.5 inches; double-column is 7 inches. Set this in inches, not pixels.
  2. Use the right DPI — journals typically require 300 DPI for raster formats. Use plt.savefig('figure.pdf') for vector output when possible.
  3. Match font sizes — captions are typically 8–10pt. Set rcParams['font.size'] = 9 globally.
  4. Use consistent colours — define a palette at the top of your script and reuse it across all figures in a paper.
  5. Export as PDF or EPS — vector formats scale without pixelation, are universally accepted, and can be opened in Inkscape for final touch-ups.

Animations for Research

The animation tutorial shows how to create FuncAnimation visualisations — useful for:

  • Showing how a model converges over training steps
  • Visualising particle simulations or fluid dynamics
  • Conference presentations where a moving plot communicates better than a static one

The Matplotlib + Inkscape Pipeline

My recommended workflow:

  1. Generate the base figure in Matplotlib (axes, data, labels)
  2. Export as PDF or SVG
  3. Open in Inkscape to fine-tune arrow positions, add annotations, or adjust text
  4. Export to final format for submission

This keeps the data layer (Python) separate from the design layer (Inkscape) — making it easy to update data without redoing the design.