Fact-checked by Grok 2 weeks ago

Matplotlib

Matplotlib is a comprehensive for creating static, animated, and interactive visualizations in . It specializes in generating publication-quality plots from array data, drawing inspiration from 's graphics commands while remaining fully independent of and primarily for use in . Developed by and first released in 2003, Matplotlib originated as a tool for EEG/ECoG data visualization in a GTK+ application before expanding into a general-purpose plotting solution. As part of the stack, it integrates tightly with for numerical computations and supports a wide array of plot types, including line plots, bar charts, scatter plots, and histograms, across multiple output formats like , , and PDF. Matplotlib's popularity is evident in its usage, with over 28 million weekly downloads from PyPI as of October 2025, making it one of the most widely adopted libraries for data visualization in scientific and engineering fields. Its flexible backend system allows embedding in GUI toolkits such as and , and it enables interactive figures in environments like Jupyter notebooks.

History

Origins

Matplotlib was created by in 2003 while he was a neurobiology researcher at the . As an epilepsy researcher working with complex (ECoG) and (EEG) data, Hunter sought to develop a free, open-source alternative for generating publication-quality visualizations, avoiding the limitations and costs of proprietary tools like and IDL. His background in neurobiology, combined with Python's growing prominence in scientific computing, drove him to build a plotting library that could handle array-based data efficiently, leveraging the newly available library for numerical operations. The initial version, 0.1, was released in October 2003, with an early emphasis on emulating MATLAB's intuitive plotting interface to make it accessible for users transitioning from commercial environments. Hunter's development began as part of a personal project to embed plotting capabilities into a +-based application that ran across Windows, , and OS X platforms. This foundational work addressed the need for high-quality, interactive 2D graphics in scientific workflows, prioritizing ease of use and portability without relying on expensive licenses. Matplotlib's first public announcements emerged around 2004, including presentations at institutions like the , marking its entry into broader scientific discussions. By 2005, it gained traction in academic circles through collaborative efforts and publications, such as the paper "matplotlib: A Portable Plotting Package" co-authored by Hunter and others, which highlighted its utility for astronomical and engineering data visualization. Early adoption focused on , where it filled a critical gap for array-oriented plotting in research environments.

Major Releases and Evolution

Matplotlib achieved a pivotal milestone with the release of version 1.0 on July 6, 2010, which established a stable that spurred its widespread adoption among users for scientific visualization. The project's trajectory shifted dramatically following the death of its founder, , on August 28, 2012, from complications related to cancer treatment; this event prompted a transition to fully community-driven governance, ensuring continued development through collaborative contributions. In 2015, Matplotlib affiliated with NumFOCUS as a sponsored project, gaining institutional support for fiscal management, funding opportunities, and community building to sustain its long-term evolution. Subsequent major releases built on this foundation: , launched on January 17, 2017, introduced comprehensive style overhauls, including the adoption of the 'viridis' colormap as default and enhanced color conversion capabilities, modernizing the library's visual output. Version 3.0 followed on September 18, 2018, focusing on improvements such as automatic backend selection, support for cyclic colormaps, and axis scaling by orders of magnitude, making it more accessible for diverse plotting needs. By November 2025, the latest stable release is version 3.10.8 from November 13, 2025, which includes compatibility with 3.13 and optimizations for rendering performance and memory efficiency. In the mid-2010s, integration with and Jupyter deepened, particularly through the %matplotlib inline magic command introduced around 2013, enabling embedded plots in notebooks and facilitating interactive workflows in . This period also marked a stronger emphasis on Matplotlib's object-oriented interface, promoting the use of Figure and Axes objects for more robust, customizable visualizations over the procedural pyplot approach. Matplotlib's growth accelerated into the , boasting over 120 million monthly downloads on PyPI by late 2023—equating to more than 1.4 billion annually—and serving as a core dependency in prominent libraries like Astropy for astronomical plotting and for result visualization.

Design and Architecture

Backend System

Matplotlib's backend system consists of modular components responsible for rendering the library's abstract visualization elements, known as artist objects, into concrete display formats suitable for screens, files, or other output devices. These backends handle the translation from Matplotlib's internal representation to various media, such as raster images via the Agg backend or vector formats like PDF and . This architecture allows Matplotlib to support diverse environments without altering the core plotting logic. Backends are categorized into interactive (also called GUI or user interface backends) and non-interactive (hardcopy or static backends). Interactive backends, such as TkAgg (based on ) and QtAgg (using or ), enable real-time display on screen and support GUI event handling, including interactions like panning, zooming, and clicking for dynamic figure manipulation in environments like or standalone scripts. In contrast, non-interactive backends like Agg for PNG raster output or SVG for focus on generating static files without user interaction, making them ideal for , web servers, or non-GUI applications. The choice between these types determines whether the output supports or prioritizes file export efficiency. Configuration of the backend occurs prior to creating any figures to avoid conflicts, primarily through the matplotlib.use('backend_name') in code, the MPLBACKEND (e.g., export MPLBACKEND=QtAgg), or by setting the backend in the matplotlibrc via rcParams["backend"]. The default backend is automatically selected based on the and available dependencies—for instance, macosx on macOS or QtAgg if is installed—ensuring broad compatibility across systems. The backend system has evolved significantly since Matplotlib's inception, transitioning from early reliance on GUI toolkits like for interactive rendering in the mid-2000s to more versatile options in later versions. Initial implementations integrated with for embedding plots in cross-platform applications, but by Matplotlib 1.0 in 2010, experimental / backends emerged to enable web-based interactivity using and elements. In the , advancements like the wasm_backend for Pyodide in 2022 further expanded web compatibility, rendering Agg buffers directly to canvases for browser-based execution without native dependencies. Performance in the backend system varies by type and settings, with raster backends like Agg relying on the Anti-Grain Geometry library for high-quality rendering that is influenced by DPI and options. Higher DPI values improve sharpness in pixel-based outputs but increase computational demands and file sizes, while —controlled via parameters like rcParams['path.sketch'] or backend-specific flags—smooths edges at the cost of rendering speed, particularly in complex figures. Vector backends such as PDF and offer resolution independence, avoiding DPI limitations and providing better scalability for print or zoomable displays, though they may incur higher memory usage for intricate paths. Backend selection thus balances output quality, interactivity, and efficiency for specific use cases.

Artist and Figure Objects

At the core of Matplotlib's architecture lies its object-oriented framework, centered around the Figure and Artist classes, which enable the creation and manipulation of graphical elements in a structured manner. The Figure serves as the top-level container for all plot elements, instantiated either through the procedural plt.figure() function from the pyplot module or directly via the matplotlib.figure.Figure class. It manages the overall canvas, including resolution settings like dots per inch (DPI), and coordinates multiple Axes instances, which represent individual plotting panels or subplots within the figure. For example, a Figure can hold several Axes arranged in a grid via methods such as add_subplot() or subplots(), allowing for complex layouts while maintaining control over the entire visualization space. Within each Figure, the Axes object functions as a subplot or panel that encapsulates the plotting area, including data visualization elements and annotations. An Axes contains various Artist subclasses, such as Line2D for rendering lines and markers, Text for labels and annotations, and Patches for shapes like rectangles, circles, or polygons used in bar charts or error regions. Key properties of an Axes include axis limits (controlled via set_xlim() and set_ylim()), tick locations and formats, and labels, all of which define the coordinate system and appearance of the plot. These elements are added to the Axes using methods like add_artist() or higher-level functions such as plot() for lines or text() for annotations, ensuring that all visual components are hierarchically organized under the Axes. The Artist class forms the foundational hierarchy for all drawable elements in Matplotlib, serving as an abstract base class from which primitives and containers inherit. Primitives like Line2D (for plotting lines and markers), Text, and Patches (e.g., Rectangle or Circle) extend the base Artist, inheriting core functionality while adding specialized rendering capabilities. Central to this hierarchy are methods such as draw(), which recursively renders the artist and its children onto a renderer provided by the backend, and a suite of set_*() methods (e.g., set_visible(), set_color(), or set_zorder()) for modifying properties like visibility, color, transparency (alpha), and drawing order. Artists can also be removed from their parent Axes using remove(), facilitating dynamic updates to the plot. This inheritance structure ensures that all graphical elements share a consistent for manipulation and rendering. Matplotlib provides two primary interfaces for interacting with these objects: a stateful, procedural approach via the pyplot module and an explicit object-oriented (OO) interface. The state machine interface, exemplified by functions like plt.plot(), implicitly maintains and modifies the current Figure and Axes, making it suitable for quick, simple visualizations but potentially limiting for complex scenarios due to its reliance on global state. In contrast, the OO interface uses explicit references, such as fig, ax = plt.subplots() followed by ax.plot(), offering finer control over specific Figure and Axes instances, which is recommended for multi-subplot figures or embedded applications. This duality allows users to choose based on needs, with the OO approach aligning more closely with the underlying Artist and Figure objects for precise customization. Several key attributes enhance the flexibility of Artist and Figure objects, including colormaps for mapping data values to colors, stylesheets for consistent aesthetic theming, and pipelines for coordinate handling. Colormaps, managed through the matplotlib.[cm](/page/CM) module, are applied to artists like lines or patches to visualize scalar data gradients, with built-in options categorized by perceptual properties (e.g., sequential, diverging, or qualitative). Stylesheets, loaded via plt.style.use() (e.g., 'ggplot' for a theme inspired by the R package ), globally configure artist properties such as line widths, colors, and fonts across a Figure. pipelines convert coordinates between systems—like data coordinates (tied to axis scales) and display coordinates (pixels on the )—using objects such as ax.transData for data-to-display mapping or ax.transAxes for normalized positioning within the Axes, enabling accurate placement of elements regardless of zoom or pan. These features collectively support the in-memory representation of plots, distinct from backend-specific rendering.

Core Features

Basic Plotting

Matplotlib provides essential functions for creating basic 2D s, enabling users to visualize data through line s, scatter s, and histograms via the pyplot module, commonly imported as plt. The core function plt.[plot](/page/Tinker_Bell_and_the_Great_Fairy_Rescue)(x, y) generates line s connecting data points, where x and y can be sequences such as lists, arrays, or Series; it automatically scales the axes to fit the data range. Parameters like color (e.g., 'b' for or hex codes like '#FF0000'), linewidth (e.g., 2.0 for thickness), linestyle (e.g., '--' for dashed lines), and marker (e.g., 'o' for circles) allow customization of appearance. For scatter plots, plt.scatter(x, y) displays individual data points without connecting lines, supporting the same data input types and offering parameters such as c for point colors and s for sizes to highlight variations in datasets. Histograms are created with plt.hist(data), which bins numerical data to show distributions; it accepts NumPy arrays or lists, with options like bins (e.g., 50 intervals), facecolor (e.g., 'g' for green), and alpha (e.g., 0.75 for transparency) to refine the visualization. Automatic axis scaling ensures that plots adapt to the input data's extent, such as setting x from 0 to 3 and y from 1 to 4 when plotting a single sequence. Essential labeling functions enhance interpretability: plt.xlabel('label') and plt.ylabel('label') annotate axes, plt.title('title') sets the plot header, and plt.legend() generates a from labels provided in plot calls (e.g., plt.plot(x, y, label='Line 1')). These elements, combined with simple customizations like named colors or linestyles, form the foundation for clear, professional plots. A representative example is plotting the y = mx + b, where m is the and b the . Consider y = 2x + 1:
python
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 5, 100)  # Generate 100 points from 0 to 5
y = 2 * x + 1  # Compute y = 2x + 1
plt.plot(x, y, 'b-', linewidth=2, label='y = 2x + 1')  # Blue solid line
plt.xlabel('x')
plt.ylabel('y')
plt.title('Linear Plot: y = 2x + 1')
plt.legend()
plt.show()
This code produces a smooth line plot with annotations, demonstrating data input via NumPy and basic styling.

Axes and Subplots

In Matplotlib, axes represent the region of a figure where is plotted, serving as containers for the visual elements of a plot. Subplots enable the arrangement of multiple axes within a single figure, facilitating comparative visualizations. The matplotlib.pyplot.subplots function creates a figure and a grid of s in one call, returning a of the figure and an array of axes objects; for instance, fig, axs = plt.subplots(2, 2) generates a 2x2 grid. Alternatively, the plt.subplot(m, n, i) selects the ith subplot in an m by n grid, where indexing starts at 1, allowing sequential access to axes. For object-oriented usage, fig.add_subplot() adds an axes to an existing figure, supporting specifications like row and column spans for flexible positioning. Axes customization allows precise control over plot appearance and data representation. Limits can be set using ax.set_xlim(left, right) and ax.set_ylim(bottom, top) to define the visible data range on the x- and y-axes, respectively. Tick parameters, such as label size, direction, and color, are adjusted via ax.tick_params(axis='both', which='major', labelsize=10), enabling tailored formatting for readability. Spines, the lines framing the plot area, can be hidden or styled, for example, by setting ax.spines['top'].set_visible(False) to remove the top border, which declutters the visualization. Sharing axes across subplots ensures consistent scaling and alignment, particularly useful for comparing datasets. In plt.subplots, the sharex=True or sharey=True parameters link the x- or y-limits between subplots in a row or column, suppressing redundant ticks on non-edge axes. Scale types can be modified post-creation, such as applying a logarithmic scale with ax.set_xscale('log') or ax.set_yscale('log') for exponential data distributions. Polar projections are created by specifying projection='polar' in add_subplot or subplot, transforming Cartesian coordinates to radial and angular, as in ax = fig.add_subplot(111, projection='polar'). For irregular subplot arrangements beyond uniform grids, the GridSpec layout engine provides advanced control, introduced in Matplotlib version 1.0.0 (July 2010). A GridSpec instance defines the grid geometry, such as gs = GridSpec(3, 3, figure=fig), after which axes are added via ax = fig.add_subplot(gs[0, :]) to span the first row fully, supporting variable widths, heights, and nested layouts. Twin axes facilitate overlaying plots with incompatible scales on the same region. The ax.twinx() method creates a secondary y-axis sharing the x-axis but positioned on the opposite side, returning a new axes object for independent plotting; similarly, ax.twiny() adds a twin x-axis. This is commonly used for dual-scale line plots, where one axes handles primary data and the twin overlays secondary metrics without distorting the shared dimension.
python
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 2], label='Primary')
ax_twin = ax.twinx()
ax_twin.plot([1, 2, 3], [100, 200, 150], 'r--', label='Secondary')
ax.set_xlabel('X')
ax.set_ylabel('Y Primary')
ax_twin.set_ylabel('Y Secondary')
fig.legend()
plt.show()
This example demonstrates twinx usage, where the red dashed line on the twin axis complements the blue solid line on the primary axis.

Advanced Functionality

3D Visualization

Matplotlib provides three-dimensional visualization capabilities through its mplot3d toolkit, which extends the core plotting framework to render scenes as 2D projections. This toolkit allows users to create a variety of plots while maintaining consistency with Matplotlib's artist-based architecture. plotting is enabled by creating a axes object using fig.add_subplot(projection='3d') or plt.subplots(projection='3d'), which produces an Axes3D instance as a subclass of the standard Axes, capable of handling coordinates and s. Key plot types supported include surface plots, scatter plots for point clouds, and wireframe grids. For surface meshes, the plot_surface(X, Y, Z) method renders a filled surface from coordinate arrays, where X, Y, and Z represent gridded data points. Similarly, scatter(xs, ys, zs) generates scatter plots by placing markers at specified coordinates, useful for visualizing point distributions in space. Wireframe plots are created with plot_wireframe(X, Y, Z), which draws a grid of lines outlining the surface structure without filling. These methods operate on arrays and support additional parameters like line styles and markers for customization. Data preparation for these plots often involves generating coordinate grids using NumPy's meshgrid function, which creates 2D s X and Y from 1D ranges to pair with a computed Z , enabling surfaces like Z = sin(sqrt(X**2 + Y**2)). Colormaps enhance visualization by mapping height or other values to colors; for instance, in a surface plot, the cmap parameter (e.g., 'coolwarm') colors the based on Z values, with a colorbar providing a reference scale. This approach allows for intuitive representation of scalar fields over 3D domains. Viewing and interaction are controlled through methods like view_init(elev, azim), where elev sets the elevation angle in degrees from the xy-plane and azim defines the azimuthal rotation around the z-axis, allowing programmatic adjustment of the perspective. In interactive backends such as Qt or TkAgg, users can rotate the view by mouse drag, pan with middle-click, and zoom via right-click drag, facilitating exploratory analysis. Despite these features, the mplot3d toolkit has limitations suited to its design for simple visualizations rather than advanced rendering. It lacks native ray tracing for realistic lighting or shadows, relying instead on basic projection mathematics, such as perspective transformations that map 3D coordinates to a 2D canvas without complex depth effects. This results in flatter appearances compared to specialized 3D libraries, though it prioritizes integration with Matplotlib's ecosystem.

Animations and Interactivity

Matplotlib's matplotlib.animation module enables the creation of dynamic visualizations by generating sequences of frames that update plot elements over time. This module includes base classes like Animation and subclasses such as FuncAnimation and ArtistAnimation, which facilitate frame-based animations by repeatedly calling user-defined functions to modify artists in a figure. The FuncAnimation class, in particular, is designed for efficiency in updating data across frames, making it suitable for real-time or simulated dynamics like evolving datasets. A basic animation setup involves creating a figure and , defining an update that refreshes the plot data for each frame, and instantiating the object. For instance, the following code creates an of an oscillating by updating line data over 100 frames with a 50-millisecond interval between frames:
python
import matplotlib.pyplot as plt
import matplotlib.[animation](/page/Animation) as animation
import [numpy](/page/NumPy) as np

fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x, np.sin(x))

def update(frame):
    line.set_ydata(np.sin(x + frame / 10))
    return line,

ani = animation.FuncAnimation(fig, update, frames=range(100), interval=50, blit=True)
This example demonstrates how FuncAnimation takes the figure instance, the update function, frame iterable, and interval as key parameters; the blit=True option optimizes performance by redrawing only the changed artists, reducing computational overhead for smoother updates. Blitting is especially beneficial for animations involving frequent partial redraws, such as oscillating waves or particle simulations, where full canvas repaints would degrade performance. Animations can be saved to file formats like or MP4 using built-in writers. For output, the writer is employed via ani.save('animation.gif', writer='pillow'), while MP4 requires FFmpeg and is invoked with ani.save('animation.mp4', writer='ffmpeg'); these methods capture frames sequentially for offline viewing or embedding. For web deployment, Matplotlib supports exporting to HTML5-compatible formats since version 2.1.0, using methods like ani.to_jshtml() to generate JavaScript-based interactive controls (play, pause, seek) embedded in an string, or ani.to_html5_video() for video tags playable in browsers without additional dependencies. Interactivity in Matplotlib extends animations and static plots through event handling, allowing responses to user inputs like mouse clicks or key presses. The canvas object provides the mpl_connect method to bind callback functions to events, such as 'button_press_event' for mouse clicks or 'key_press_event' for keyboard input; for example, cid = fig.canvas.mpl_connect('button_press_event', on_click) connects a function on_click(event) that can query event attributes like coordinates to trigger plot updates, enabling features like draggable elements or zoom controls during animation playback. This GUI-neutral event model integrates seamlessly with figure objects, supporting asynchronous interactions without tying to specific backends. Common use cases include pausing animations on key press or highlighting data points on hover, enhancing user engagement in exploratory visualizations.

Usage and Examples

Installation and Setup

Matplotlib is primarily installed using package managers like or conda, which handle its dependencies automatically. The recommended command for users is pip install matplotlib, which fetches the latest stable release from PyPI and installs required dependencies such as (version 1.23.0 or later). For users of the Conda ecosystem, the installation is conda install matplotlib from the default or conda-forge channel, ensuring compatibility within managed environments. As of the 3.10 series (stable release 3.10.7 in October 2025), Matplotlib requires 3.10 or higher for full compatibility, including support for recent compilers and updated libraries like and libpng. Optional backends for interactive plotting, such as Qt-based interfaces, require additional packages like PySide6 (pip install PySide6) or (often bundled with but may need sudo apt install python3-tk on Debian-based systems). Non-interactive backends like Agg for image generation are available out-of-the-box without extras. To set up a clean environment, virtual environments are advised to isolate dependencies and avoid conflicts. With Python's built-in venv module, create and activate one via python -m venv matplotlib_env followed by source matplotlib_env/bin/activate (on systems) or matplotlib_env\Scripts\activate (on Windows), then install Matplotlib. Conda users can use conda create -n matplotlib_env python=3.10; conda activate matplotlib_env; conda install matplotlib. On distributions like , common issues such as font rendering problems can arise from missing system libraries; installing via the ([sudo](/page/Sudo) apt install python3-matplotlib) typically resolves this by pulling in dependencies like and . For Anaconda distributions, Matplotlib is pre-included in the base installation, simplifying setup for scientific workflows. To verify the installation, run a simple test script in :
python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()
This should display a basic plot without errors, confirming that core functionality and a suitable backend are operational. If issues persist, check the version with import matplotlib; print(matplotlib.__version__) and consult the configuration directory via matplotlib.get_configdir() for custom tweaks.

Simple Plotting Examples

Matplotlib provides straightforward functions for creating basic visualizations, enabling users to generate plots with minimal code after importing the necessary modules. These examples demonstrate core plotting capabilities using the pyplot interface, which is the most accessible entry point for beginners. A fundamental example is plotting a of the sine function, which illustrates how to combine Matplotlib with for generating data arrays. The following code creates 100 evenly spaced points from 0 to 10 and plots the sine values:
python
import matplotlib.pyplot as plt
import [numpy](/page/NumPy) as np
x = np.linspace(0, 10, 100)
plt.plot(x, np.[sin](/page/Sin)(x))
plt.show()
This produces a sinusoidal , showcasing the library's ability to handle mathematical functions directly. For categorical data, a offers a simple way to visualize discrete values. Consider plotting bars for categories 'A' and 'B' with heights 3 and 7, respectively:
python
categories = ['A', 'B']
values = [3, 7]
plt.bar(categories, values)
plt.show()
This renders vertical bars proportional to the values, useful for comparing categories at a glance. To persist visualizations outside interactive sessions, figures can be saved to files with high resolution using the savefig function. For instance, after generating a plot, invoke plt.savefig('plot.png', dpi=300) to export as a image at 300 , ensuring crisp output for reports or publications. In Jupyter notebooks, plots display inline by default when using the %matplotlib inline magic command at the start of a cell, eliminating the need for explicit plt.show() calls in many cases. This integration streamlines workflows. When dealing with potentially invalid inputs, such as empty data arrays, Matplotlib may produce blank plots or raise exceptions like ValueError if dimensions mismatch. To handle this, wrap plotting code in a try-except block and check data lengths beforehand, e.g., if len(x) > 0 and len(y) > 0: plt.plot(x, y) else: print("No data to plot"). This prevents runtime errors and provides user feedback.

Integration

With Scientific Libraries

Matplotlib integrates seamlessly with , the foundational library for numerical computing in , by accepting NumPy arrays directly as input for most plotting s. This allows for efficient visualization of array data without explicit type conversions, leveraging NumPy's capabilities to handle operations across array dimensions. For instance, generating a simple line plot involves creating an array with np.linspace and plotting it alongside a computed function like x**2, where broadcasting applies the squaring operation element-wise. Similarly, plt.imshow can display a random array generated by np.random.rand(10,10), rendering it as a pseudocolor image that highlights NumPy's role in rapid data generation and visualization. Pandas, a library for data manipulation and analysis, provides a high-level to Matplotlib through the DataFrame.plot() method, which wraps underlying Matplotlib functionality to simplify plotting of tabular data. By default, this method uses Matplotlib as its backend and supports various plot kinds, such as line plots with kind='line' for or box plots with kind='box' for summarizing distributions across columns. The returned Axes object enables further Matplotlib customization, ensuring compatibility while abstracting common boilerplate code. Matplotlib complements , the library for scientific and technical computing, by providing visualization tools for optimization results and statistical fits. For example, after performing with scipy.optimize.curve_fit on noisy data, Matplotlib can plot the fitted model against the original points to assess accuracy, often using scatter plots for data and lines for the fit. In statistical contexts, contour plots from scipy.stats distributions, such as bivariate normals, visualize probability density functions by evaluating the PDF on a grid and using plt.contour to draw level curves, aiding in the interpretation of joint distributions. Array reshaping is frequently employed when preparing data for Matplotlib functions that expect specific dimensions, such as plt.pcolormesh, which requires a array for the color values. Users can apply np.reshape to flatten and reorganize 1D data into the required grid, with the function implicitly handling the structured coordinates for irregular grids, enabling efficient pseudocolor representations of gridded data. To optimize performance when working with large datasets from these libraries, Matplotlib benefits from NumPy's vectorized operations, which avoid explicit Python loops in favor of array-wide computations. For example, instead of iterating over array elements to compute plot values, and like np.sin or element-wise multiplication process entire arrays at once, significantly reducing computation time and memory usage before passing data to plotting routines.

In Data Science Workflows

In data science workflows, Matplotlib plays a central role in (EDA) by enabling the creation of visualizations such as heatmaps and pair plots to inspect features within scikit-learn pipelines. Heatmaps, generated using functions like pcolor or imshow, allow practitioners to visualize matrices or data distributions across variables, revealing patterns like or outliers in datasets before model training. Similarly, pair plots via pandas.plotting.scatter_matrix produce matrices of scatter plots and histograms for all pairwise feature combinations, facilitating the identification of relationships and distributions in preparation for tasks. These tools integrate seamlessly with scikit-learn's steps, such as or selection, to support iterative EDA cycles. For reporting purposes, Matplotlib figures are commonly embedded directly into Jupyter notebooks, where they render inline as interactive or static outputs, allowing data scientists to combine code, narrative, and visuals in a single document for collaborative analysis. Notebooks containing these plots can then be exported to PDF or formats using nbconvert, enabling the generation of publication-ready reports with high-resolution figures suitable for academic papers or business presentations. This workflow ensures that exploratory insights and final results are documented reproducibly without manual image extraction. In applications, Matplotlib serves as the backend for 's visualization modules, producing essential plots like curves and matrices to evaluate model performance. The RocCurveDisplay class plots curves from estimator predictions, quantifying trade-offs between true positive and false positive rates, while ConfusionMatrixDisplay renders matrices that highlight errors across categories. These displays can be customized with Matplotlib parameters, such as transparency or color maps, and added to existing axes for multi-model comparisons in validation pipelines. Matplotlib supports automation in data workflows through scripting, where reusable functions generate plots in batch processes, such as creating dashboards for results by iterating over experiment variants and saving figures programmatically. For instance, a helper can plot multiple datasets on subplots with parameterized styles, enabling the automated production of comparison visuals from test metrics without interactive intervention. This approach is particularly useful in production environments, where scripts process large volumes of A/B test data to output standardized reports. Best practices for using Matplotlib in projects emphasize through consistent theming and controlled randomness. Applying style sheets via plt.style.use()—such as 'ggplot' or .mplstyle files—ensures uniform aesthetics across figures, including fonts, colors, and line widths, which aids in maintaining professional consistency in team-based analyses. For , setting a random seed (e.g., np.random.seed(42)) before data generation guarantees identical plot outputs across runs, while context managers like plt.style.context() allow temporary styling without global changes. These techniques, combined with version-controlled scripts, facilitate reliable workflows from EDA to deployment.

Alternatives

Several Python visualization libraries serve as alternatives to Matplotlib, each offering distinct advantages in interactivity, ease of use, or specialized plotting paradigms, though they often trade off some of Matplotlib's fine-grained control for higher-level abstractions. These alternatives are particularly useful when Matplotlib's static, low-level approach proves cumbersome for specific workflows, such as web deployment or . Seaborn builds directly on Matplotlib to provide a high-level interface for creating attractive and informative , such as distribution plots, categorical plots, and visualizations, with built-in support for DataFrames. It emphasizes easier aesthetics through predefined themes and color palettes, reducing the need for extensive customization code compared to Matplotlib's verbose syntax. However, this convenience comes at the cost of reduced low-level control, as Seaborn abstracts many of Matplotlib's underlying parameters, making it less suitable for highly bespoke plot modifications. Plotly offers an interactive, web-based alternative to Matplotlib's primarily static outputs, enabling features like zooming, panning, and hovering directly in the browser via rendering. It integrates seamlessly with , a for building analytical applications and dashboards, allowing users to create dynamic, shareable visualizations with minimal additional setup. While powerful for exploratory and online presentations, Plotly has a heavier dependency footprint than Matplotlib, requiring libraries like , , and technologies, which can increase installation size and runtime overhead. Bokeh provides similar web interactivity to but emphasizes streaming data and real-time updates, rendering plots using , CSS, and for browser-based dashboards without needing a . Unlike Matplotlib's focus on static, publication-ready images, Bokeh excels in scenarios involving large datasets or live data feeds, such as scientific simulations or monitoring tools, with tools for linking multiple plots and custom JavaScript callbacks. This web-centric design, however, introduces complexity for purely offline or print-oriented tasks, where Matplotlib's simplicity may be preferable. Plotnine implements a declarative grammar-of-graphics style inspired by R's , abstracting Matplotlib's machinery to allow users to build plots layer by layer using functions like geom_point() for points or geom_smooth() for trend lines, with automatic handling of facets, scales, and themes. This approach promotes reproducible and readable code for complex visualizations, such as multi-panel figures or customized , while relying on Matplotlib for the final rendering. It sacrifices some of Matplotlib's direct imperative control in favor of -like consistency, making it ideal for users transitioning from but potentially overkill for simple plots. Alternatives like these are chosen based on project needs: or for interactive dashboards and web apps where user engagement is key, Seaborn or plotnine for streamlined statistical or layered plotting with less boilerplate, and Matplotlib retained for scenarios demanding publication-quality static images, such as academic papers or reports requiring precise, vector-based outputs like PDFs or SVGs.

Extensions and Add-ons

Matplotlib's extensibility is enhanced by a variety of community-developed libraries that build directly on its core to add specialized functionality, such as geospatial plotting, support, domain-specific visualizations, and stylistic improvements. These add-ons leverage Matplotlib's axes and figure objects to extend capabilities without altering the underlying rendering engine, allowing users to incorporate advanced features into existing workflows. Cartopy is a prominent extension for geospatial data visualization, providing cartographic tools that integrate seamlessly with Matplotlib by subclassing its Axes class into GeoAxes, which supports map projections like the for global visualizations. This enables the plotting of geographic data, such as coastlines and gridded datasets, directly onto Matplotlib figures while handling coordinate transformations automatically. Developed by the SciTools team, Cartopy has become the standard for Python-based mapping since its initial release in 2012. Prior to Cartopy's maturity, the Basemap toolkit served as Matplotlib's primary extension for geographic plotting, offering features like orthographic and cylindrical projections to render maps with overlays such as country boundaries. Maintained as part of the Matplotlib project until , Basemap was officially deprecated in favor of Cartopy due to its more and active development, though codebases continue to use it for historical geographic analyses. Mayavi extends Matplotlib's visualization scope into interactive scientific data rendering, primarily powered by the library, but it incorporates Matplotlib as an optional backend for embedding 2D annotations, legends, and static elements within 3D scenes. This hybrid approach allows users to combine Mayavi's advanced 3D pipelines—such as and —with Matplotlib's 2D plotting for comprehensive scientific figures, as seen in fields like and simulations. Released by Enthought in 2007, Mayavi remains a key tool for researchers needing beyond-basic 3D capabilities. For niche applications in , mplstereonet provides specialized plotting functions that utilize Matplotlib's polar axes to generate stereonets, which visualize orientation data such as fault planes and fold axes through great-circle and pole projections. This library simplifies the creation of equal-area or equal-angle stereograms, essential for analyzing rock deformation, by wrapping Matplotlib's projection tools with geology-specific methods like density contouring. Maintained since 2012, mplstereonet is widely adopted in earth sciences for its precise handling of angular measurements. Community-driven add-ons further customize Matplotlib's output for specific domains and . Seaborn, for instance, acts as a stylistic and functional extension by defining predefined styles—such as 'seaborn-whitegrid'—that modify Matplotlib's parameters for cleaner, publication-ready plots, while also adding high-level functions for statistical visualizations built on Matplotlib . Similarly, mplfinance, an official Matplotlib subproject, specializes in financial charting by providing , OHLC (open-high-low-close), and volume plots optimized for time-series , streamlining the creation of and derivative analyses. These tools, available via PyPI, exemplify how the ecosystem around Matplotlib fosters targeted enhancements without requiring users to abandon its familiar interface.

References

  1. [1]
    Matplotlib — Visualization with Python
    Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. Matplotlib makes easy things easy and hard ...Matplotlib 3.10.7 documentation · Examples · Matplotlib · Using Matplotlib
  2. [2]
    History — Matplotlib 3.10.7 documentation
    Matplotlib is a library for making 2D plots of arrays in Python. Although it has its origins in emulating the MATLAB graphics commands, it is independent of ...
  3. [3]
    The Architecture of Open Source Applications (Volume 2)matplotlib
    matplotlib was thus originally developed as an EEG/ECoG visualization tool for this GTK+ application, and this use case directed its original architecture.
  4. [4]
    Introduction to Matplotlib - GeeksforGeeks
    Jul 11, 2025 · Developed by John D. Hunter in 2003, it enables users to graphically represent data, facilitating easier analysis and understanding.Missing: popularity | Show results with:popularity
  5. [5]
    Plot types — Matplotlib 3.10.7 documentation
    Overview of many common plotting commands provided by Matplotlib. See the gallery for more examples and the tutorials page for longer examples.Plot(x, y) · Bar(x, height) · Scatter(x, y) · Hist(x)<|control11|><|separator|>
  6. [6]
    The 7 most popular ways to plot data in Python - Opensource.com
    Matplotlib is the oldest Python plotting library, and it's still the most popular. It was created in 2003 as part of the SciPy Stack, an open source scientific ...Matplotlib · Plotly · Pygal
  7. [7]
    matplotlib - PyPI Download Stats
    PyPI Stats. Search · All packages · Top packages · Track packages. matplotlib. PyPI ... Downloads last day: 2,636,136. Downloads last week: 28,838,291. Downloads ...<|control11|><|separator|>
  8. [8]
    Using Matplotlib — Matplotlib 3.10.7 documentation
    Introduction to figures · Output backends · Matplotlib Application Interfaces (APIs) · Interacting with figures · Interactive figures and asynchronous programming ...Customizing Matplotlib · Matplotlib Application... · Text in Matplotlib · Colors
  9. [9]
    John D. Hunter '90 | Princeton Alumni Weekly
    Dec 12, 2012 · He was 44. John was raised in Dyersburg, Tenn. After Princeton, he earned a Ph.D. in neurobiology in 2004 from the University of Chicago.
  10. [10]
    07. Matplotlib (pdf) - CliffsNotes
    Feb 5, 2025 · History of Matplotlib • Created by : John D. Hunter • Developed : 2002 • Initial Release : 2003 Matplotlib was inspired by MATLAB's plotting ...
  11. [11]
    John Hunter - Boom! Michael Droettboom's blog
    Aug 31, 2012 · I first met John Hunter when he came to give a presentation about matplotlib at the Space Telescope Science Institute in 2004 (or thereabouts).Missing: public announcement 2005
  12. [12]
    What's new in Matplotlib 1.0 (Jul 06, 2010)
    Jul 6, 2010 · Simon Ratcliffe and Ludwig Schwardt have released an HTML5/Canvas backend for matplotlib. The backend is almost feature complete.
  13. [13]
    A sad day for our community. John Hunter: 1968-2012. - Matplotlib
    Aug 30, 2012 · John D. Hunter died from complications arising from cancer treatment at the University of Chicago hospital, after a brief but intense battle with this terrible ...
  14. [14]
    Matplotlib - NumFOCUS
    Matplotlib. NumFOCUS Sponsored Project since 2015. Matplotlib is a flexible and customizable tool for producing static and interactive data visualizations.
  15. [15]
    What's new in Matplotlib 2.0 (Jan 17, 2017)
    The major changes in v2.0 are related to overhauling the default styles. Improved color conversion API and RGBA support.Default Style Changes · Improved Image Support · Non-Linear Scales On Image...
  16. [16]
    What's new in Matplotlib 3.0 (Sep 18, 2018)
    What's new in Matplotlib 3.0 (Sep 18, 2018)# · Improved default backend selection# · Cyclic colormaps# · Ability to scale axis by a fixed order of magnitude# · Add ...
  17. [17]
    Python 3.13 support table for most popular Python packages
    Python 3.13 is a currently supported version of Python. This site shows Python 3.13 support for the 360 most downloaded packages on PyPI.
  18. [18]
    Backends — Matplotlib 3.10.7 documentation
    Backends are used for displaying Matplotlib figures (see Introduction to Figures), on the screen, or for writing to files.
  19. [19]
    Matplotlib 3.10.7 documentation
    Setting the Matplotlib backend. This should be called before any figure is created, because it is not possible to switch between different GUI backends after ...
  20. [20]
    New in matplotlib 1.0 — Matplotlib 2.2.0 documentation
    Simon Ratcliffe and Ludwig Schwardt have released an HTML5/Canvas backend for matplotlib. The backend is almost feature complete, and they have done a lot of ...
  21. [21]
    HTML5 <canvas> based renderer for Matplotlib in Pyodide
    Apr 1, 2022 · In this post, we present a new backend for Matplotlib enabling the rendering of figures in the browser by leveraging the <canvas> element.
  22. [22]
    Performance — Matplotlib 3.10.7 documentation
    Matplotlib provides multiple ways to greatly reduce rendering time at the cost of a slight change (to a settable tolerance) in your plot's appearance.Missing: anti- aliasing DPI<|control11|><|separator|>
  23. [23]
    Introduction to Artists — Matplotlib 3.10.7 documentation
    Almost all objects you interact with on a Matplotlib plot are called "Artist" (and are subclasses of the Artist class). Figure and Axes are Artists.
  24. [24]
    matplotlib.figure — Matplotlib 3.10.7 documentation
    Add an Artist to the figure. Usually artists are added to Axes objects using Axes.add_artist ; this method can be used in the rare cases ...matplotlib.figure.Figure.colorbar · Figure.subplots · Figsize · Savefig
  25. [25]
  26. [26]
    matplotlib.artist — Matplotlib 3.10.7 documentation
    Abstract base class for objects that render into a FigureCanvas. Typically, all visible elements in a figure are subclasses of Artist.
  27. [27]
    Pyplot tutorial — Matplotlib 3.10.7 documentation
    matplotlib.pyplot is a collection of functions that make matplotlib work like MATLAB. Each pyplot function makes some change to a figure.Matplotlib.pyplot.axis · Matplotlib.pyplot.show · Image tutorial
  28. [28]
    Choosing Colormaps in Matplotlib
    The idea behind choosing a good colormap is to find a good representation in 3D colorspace for your data set.Overview · Classes Of Colormaps · Grayscale Conversion
  29. [29]
    matplotlib.cm — Matplotlib 3.10.7 documentation
    Container for colormaps that are known to Matplotlib by name. The universal registry instance is matplotlib.colormaps.Missing: stylesheets | Show results with:stylesheets
  30. [30]
    Style sheets reference — Matplotlib 3.10.7 documentation
    This script demonstrates the different available style sheets on a common set of example plots: scatter plot, image, bar graph, patches, line plot and histogram ...
  31. [31]
    Transformations Tutorial — Matplotlib 3.10.7 documentation
    ### Summary of Transformation Pipelines for Coordinates in Matplotlib Artists
  32. [32]
  33. [33]
  34. [34]
  35. [35]
  36. [36]
    matplotlib.pyplot.subplots — Matplotlib 3.10.7 documentation
    matplotlib.pyplot.sca · matplotlib.pyplot.subplot · matplotlib.pyplot.subplot2grid · matplotlib.pyplot.subplot_mosaic; matplotlib.pyplot.subplots; matplotlib.Subplotmatplotlib.figure.Figure.subplots
  37. [37]
    Figure.add_subplot - Matplotlib
    The Axes of the subplot. The returned Axes can actually be an instance of a subclass, such as projections.polar.PolarAxes for polar projections.
  38. [38]
    matplotlib.axes — Matplotlib 3.10.7 documentation
    Configure the ScalarFormatter used by default for linear Axes. Axes.tick_params. Change the appearance of ticks, tick labels, and gridlines. Axes.locator_params.Axes.legend · Axes.grid · Axes.set_xlabel · Axes.set_xlim
  39. [39]
    Spines — Matplotlib 3.10.7 documentation
    normal Axes, with spines on all four sides; · an Axes with spines only on the left and bottom; · an Axes using custom bounds to limit the extent of the spine.
  40. [40]
    Shared axis — Matplotlib 3.10.7 documentation
    You can share the x- or y-axis limits for one axis with another by passing an Axes instance as a sharex or sharey keyword argument.
  41. [41]
    Polar plot — Matplotlib 3.10.7 documentation
    Demo of a line plot on a polar axis. The second plot shows the same data, but with the radial axis starting at r=1 and the angular axis starting at 0 degrees ...
  42. [42]
    matplotlib.gridspec.GridSpec — Matplotlib 3.10.7 documentation
    A grid layout to place subplots within a figure. The location of the grid cells is determined in a similar way to SubplotParams using left, right, top, bottom, ...GridSpec with variable sizes... · Gridspec for multi-column/row... · Nested GridspecsMissing: introduction | Show results with:introduction
  43. [43]
    matplotlib.gridspec — Matplotlib 3.10.7 documentation
    gridspec contains classes that help to layout multiple Axes in a grid-like pattern within a figure. The GridSpec specifies the overall grid structure.
  44. [44]
    matplotlib.axes.Axes.twinx — Matplotlib 3.10.7 documentation
    The `twinx` method creates a new axes sharing the x-axis, with an invisible x-axis and an independent y-axis positioned opposite to the original one.Parasite Simple · Multiple y-axis with Spines · Parasite axis demo
  45. [45]
    mpl_toolkits.mplot3d — Matplotlib 3.10.7 documentation
    The mplot3d toolkit adds 3D plotting to Matplotlib, using an Axes object to create 2D projections of 3D scenes. It is not the fastest 3D library.
  46. [46]
    3D surface (colormap) — Matplotlib 3.10.7 documentation
    Demonstrates plotting a 3D surface colored with the coolwarm colormap. The surface is made opaque by using antialiased=False.
  47. [47]
    matplotlib.animation — Matplotlib 3.10.7 documentation
    The easiest way to make a live animation in Matplotlib is to use one of the Animation classes. A base class for Animations. TimedAnimation subclass that makes ...
  48. [48]
    matplotlib.animation.FuncAnimation
    Matplotlib 3.10.7 documentation - Home · Plot types · User guide · Tutorials · Examples · Reference · Contribute · Releases. Choose ...
  49. [49]
    Animations using Matplotlib
    This tutorial covers a general guideline on how to create such animations and the different options available.
  50. [50]
    What's new in Matplotlib 2.1.0 (Oct 7, 2017)
    The polar axes transforms have been greatly re-factored to allow for more customization of view limits and tick labelling.
  51. [51]
    matplotlib.animation.Animation — Matplotlib 3.10.7 documentation
    A base class for Animations. This class is not usable as is, and should be subclassed to provide needed behavior.
  52. [52]
    Event handling and picking — Matplotlib 3.10.7 documentation
    The most common events that are the bread and butter of event handling are key press/release events and mouse press/release and movement events.Event Connections · Event Attributes · Draggable Rectangle Exercise
  53. [53]
  54. [54]
    Installation — Matplotlib 3.10.7 documentation
    Matplotlib releases are available as wheel packages for macOS, Windows and Linux on PyPI. Install it using pip.
  55. [55]
    Matplotlib - PyPI
    Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. Check out our home page for more information.Matplotlib 3.8.4 · Matplotlib 1.2.1 · Matplotlib 3.4.3 · Matplotlib 3.5.1Missing: popularity | Show results with:popularity<|separator|>
  56. [56]
    Dependency version policy - Matplotlib
    The following list shows the minimal versions of Python and NumPy dependencies for different versions of Matplotlib.<|control11|><|separator|>
  57. [57]
    Matplotlib - Anaconda.org
    matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across ...
  58. [58]
    Release notes — Matplotlib 3.10.7 documentation
    What's new in Matplotlib 3.8.0 (Sept 13, 2023) · API Changes for 3.8.1 · API Changes for 3.8.0 · GitHub statistics for 3.8.3 (Feb 14, 2024) ...What's new in Matplotlib 3.10.0... · GitHub statistics for 3.10.7 (Oct...Missing: first | Show results with:first
  59. [59]
    Dependencies — Matplotlib 3.10.7 documentation
    Matplotlib requires a C++ compiler that supports C++17, and each platform has a development environment that must be installed before a compiler can be ...Runtime Dependencies · C Libraries · Build Dependencies
  60. [60]
    Matplotlib - Anaconda.org
    conda install. To install this package run one of the following: conda install anaconda::matplotlib. Description. Matplotlib produces publication-quality ...
  61. [61]
    Getting started — Matplotlib 3.10.7 documentation
    Check out Plot types to get an overview of the types of plots you can create with Matplotlib. Learn Matplotlib from the ground up in the Quick-start guide.Missing: library | Show results with:library
  62. [62]
  63. [63]
    matplotlib.axes.Axes.plot — Matplotlib 3.10.7 documentation
    You may suppress the warning by adding an empty format string plot('n', 'o', '', data=obj) . Returns: list of Line2D. A list of lines representing the ...
  64. [64]
    matplotlib.pyplot.bar — Matplotlib 3.10.7 documentation
    Matplotlib 3.10.7 documentation - Home · Plot types · User guide · Tutorials · Examples · Reference · Contribute · Releases. Choose version. Gitter · Discourse ...Grouped bar chart with labels · Bar color demo · Matplotlib.pyplot.bar_label · Barh
  65. [65]
    matplotlib.pyplot.savefig — Matplotlib 3.10.7 documentation
    Save the current figure as an image or vector graphic to a file. Call signature: savefig(fname, *, transparent=None, dpi='figure', format=None, metadata=None, ...matplotlib.figure.Figure.savefig · Rasterization for vector graphics · SVG filter pie
  66. [66]
    Quick start guide — Matplotlib 3.10.7 documentation
    This tutorial covers some basic usage patterns and best practices to help you get started with Matplotlib.Matplotlib.axis · Embedding Matplotlib in... · Matplotlib.pyplot.subplot_mosaic
  67. [67]
  68. [68]
    pandas.DataFrame.plot — pandas 2.3.3 documentation
    ### Summary of pandas.DataFrame.plot Integration with Matplotlib
  69. [69]
    2.7. Mathematical optimization: finding minima of functions — Scipy ...
    Mathematical optimization deals with the problem of finding numerically minimums (or maximums or zeros) of a function.
  70. [70]
    Statistical functions (scipy.stats) — SciPy v1.16.2 Manual
    ### Summary of Visualizing SciPy.stats with Matplotlib (Contour Plots or Statistical Fits)
  71. [71]
    matplotlib.pyplot.pcolormesh
    Create a pseudocolor plot with a non-regular rectangular grid. Call signature: pcolormesh([X, Y,] C, **kwargs) X and Y can be used to specify the corners of ...Pcolormesh · Pcolormesh grids and shading · Pcolor
  72. [72]
    pcolor images — Matplotlib 3.10.7 documentation
    ### Matplotlib's Use for Heatmaps in Exploratory Data Analysis
  73. [73]
    pandas.plotting.scatter_matrix — pandas 2.3.3 documentation
    ### Summary of `pandas.plotting.scatter_matrix`
  74. [74]
    6. Visualizations — scikit-learn 1.7.2 documentation
    Scikit-learn defines a simple API for creating visualizations for machine learning. The key feature of this API is to allow for quick plotting and visual ...
  75. [75]
    Project Jupyter Documentation — Jupyter Documentation 4.1.1 alpha documentation
    ### Summary: Embedding and Exporting Matplotlib Plots in Jupyter Notebooks
  76. [76]
  77. [77]
  78. [78]
    Customizing Matplotlib with style sheets and rcParams
    There are three ways to customize Matplotlib: Setting rcParams at runtime takes precedence over style sheets, style sheets take precedence over matplotlibrc ...
  79. [79]
    seaborn: statistical data visualization — seaborn 0.13.2 documentation
    - **Relation to Matplotlib**: Seaborn is a Python data visualization library based on Matplotlib, providing a high-level interface for statistical graphics.
  80. [80]
    Difference Between Matplotlib VS Seaborn - GeeksforGeeks
    Jul 15, 2025 · Seaborn is more comfortable in handling Pandas data frames. It uses basic sets of methods to provide beautiful graphics in Python. Pliability ...
  81. [81]
    Plotly
    ### Comparison of Plotly and Matplotlib
  82. [82]
    Plotting Data in Python: matplotlib vs plotly - ActiveState
    Oct 10, 2019 · Plotly has several advantages over matplotlib. One of the main advantages is that only a few lines of codes are necessary to create ...Missing: comparison | Show results with:comparison
  83. [83]
    Bokeh documentation
    ### Summary of Bokeh Features for Interactive Web Visualizations
  84. [84]
  85. [85]
    Mayavi: 3D scientific data visualization and plotting in Python
    May 16, 2025 · Welcome, this is the user guide for Mayavi, a application and library for interactive scientific data visualization and 3D plotting in ...Installation · Example gallery · Mlab · An overview of MayaviMissing: backend | Show results with:backend
  86. [86]
    Controlling figure aesthetics — seaborn 0.13.2 documentation
    Seaborn comes with a number of customized themes and a high-level interface for controlling the look of matplotlib figures.Missing: extension | Show results with:extension
  87. [87]
    matplotlib/mplfinance: Financial Markets Data Visualization ... - GitHub
    This repository, matplotlib/mplfinance, contains a new matplotlib finance API that makes it easier to create financial plots.Mplfinance wiki pages · Latest Release Information · Pull requests 19 · Actions