# Matplotlib — Comprehensive Visualization Library for Python > Matplotlib is the foundational plotting library for Python. It creates static, animated, and interactive visualizations — from simple line plots to complex multi-panel figures — and powers the visualization backends of pandas, seaborn, and scikit-learn. ## Install Save as a script file and run: # Matplotlib — Comprehensive Visualization Library for Python ## Quick Use ```bash # Install Matplotlib pip install matplotlib # Quick plot python3 -c " import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2 * np.pi, 100) plt.plot(x, np.sin(x), label='sin') plt.plot(x, np.cos(x), label='cos') plt.xlabel('x') plt.ylabel('y') plt.title('Trigonometric Functions') plt.legend() plt.savefig('plot.png', dpi=150) print('Saved plot.png') " ``` ## Introduction Matplotlib is the original and most comprehensive plotting library in Python. Created by John Hunter in 2003 to replicate MATLAB plotting capabilities in Python, it has become the foundation of the entire Python visualization ecosystem. Libraries like seaborn, pandas plotting, and scikit-learn visualization are all built on top of Matplotlib. With over 23,000 GitHub stars and two decades of development, Matplotlib can produce virtually any type of static visualization — line plots, bar charts, histograms, scatter plots, heatmaps, 3D plots, geographic maps, and publication-quality figures for scientific papers. ## What Matplotlib Does Matplotlib provides two interfaces: pyplot (a MATLAB-like state-based interface for quick plots) and the object-oriented API (for full control over figures, axes, and artists). It renders to multiple backends including PNG, PDF, SVG, and interactive windows, making it suitable for both exploratory analysis and publication. ## Architecture Overview ``` [User Code] plt.plot() or fig, ax = plt.subplots() | [pyplot / OO API] State machine or explicit Figure/Axes objects | [Artist Layer] Every plot element is an Artist: Line2D, Text, Patch, Collection | [Renderer] Transforms Artists to pixels/vectors | +-------+-------+-------+ | | | | [Agg] [PDF] [SVG] [Interactive] PNG Vector Web Qt, Tk, GTK raster output output windows ``` ## Self-Hosting & Configuration ```python import matplotlib.pyplot as plt import numpy as np # Publication-quality figure fig, axes = plt.subplots(2, 2, figsize=(10, 8)) # Line plot ax = axes[0, 0] x = np.linspace(0, 10, 100) ax.plot(x, np.sin(x), "b-", linewidth=2) ax.set_title("Line Plot") ax.set_xlabel("x") # Histogram ax = axes[0, 1] data = np.random.normal(0, 1, 1000) ax.hist(data, bins=30, edgecolor="black", alpha=0.7) ax.set_title("Histogram") # Scatter plot ax = axes[1, 0] x = np.random.randn(200) y = x + np.random.randn(200) * 0.5 ax.scatter(x, y, alpha=0.5, c=y, cmap="viridis") ax.set_title("Scatter Plot") # Bar chart ax = axes[1, 1] categories = ["A", "B", "C", "D"] values = [23, 45, 12, 67] ax.bar(categories, values, color=["#e74c3c", "#3498db", "#2ecc71", "#f39c12"]) ax.set_title("Bar Chart") plt.tight_layout() plt.savefig("dashboard.png", dpi=300, bbox_inches="tight") ``` ## Key Features - **Comprehensive Plot Types** — line, bar, scatter, histogram, heatmap, 3D, pie, box, violin - **Publication Quality** — LaTeX rendering, precise sizing, vector output (PDF/SVG) - **Multiple Backends** — PNG, PDF, SVG, interactive Qt/Tk/GTK windows - **Subplot System** — complex multi-panel figures with gridspec layouts - **Customization** — control every element: colors, fonts, ticks, legends, annotations - **Animation** — create animated plots with FuncAnimation - **Style Sheets** — preset themes (ggplot, seaborn, dark_background, etc.) - **3D Plotting** — 3D scatter, surface, wireframe via mpl_toolkits.mplot3d ## Comparison with Similar Tools | Feature | Matplotlib | Seaborn | Plotly | Bokeh | Altair | |---|---|---|---|---|---| | Type | Static + Animated | Static (stats) | Interactive | Interactive | Declarative | | Learning Curve | Moderate | Low | Low | Moderate | Low | | Customization | Unlimited | Theme-based | Good | Good | Limited | | Publication Ready | Excellent | Good | Moderate | Moderate | Moderate | | Interactivity | Limited | No | Excellent | Excellent | Via Vega | | 3D Support | Basic | No | Excellent | Limited | No | | Built On | Independent | Matplotlib | Plotly.js | BokehJS | Vega-Lite | ## FAQ **Q: Matplotlib vs Seaborn — which should I use?** A: Use Seaborn for statistical plots (distributions, regressions, categorical data) — it produces beautiful defaults with less code. Use Matplotlib when you need full control, custom layouts, or plot types Seaborn does not cover. Seaborn is built on Matplotlib, so you can mix both. **Q: How do I make Matplotlib plots look modern?** A: Use plt.style.use("seaborn-v0_8") or custom styles, increase figure DPI, use consistent color palettes, and remove unnecessary chart junk (top/right spines, excessive gridlines). **Q: Should I use pyplot or the object-oriented API?** A: For quick single plots, pyplot is fine. For anything with multiple subplots or that needs to be reusable, use the object-oriented API (fig, ax = plt.subplots()). The OO API gives you explicit control. **Q: How do I save high-resolution figures for papers?** A: Use plt.savefig("fig.pdf") for vector output (infinitely scalable) or plt.savefig("fig.png", dpi=300) for raster. Use bbox_inches="tight" to avoid cropping. ## Sources - GitHub: https://github.com/matplotlib/matplotlib - Documentation: https://matplotlib.org - Created by John Hunter (2003) - License: PSF-based (matplotlib license) --- Source: https://tokrepo.com/en/workflows/10871b58-366d-11f1-9bc6-00163e2b0d79 Author: Script Depot