Sample plots in Matplotlib

Here you'll find a host of example plots with the code that generated them.

Line Plot

Here's how to create a line plot with text labels using plot()open in new window.

Multiple subplots in one figure

Multiple axes (i.e. subplots) are created with the subplot()open in new window function:


Matplotlib can display images (assuming equally spaced horizontal dimensions) using the imshow()open in new window function.

Example of using imshow()open in new window to display a CT scan

Contouring and pseudocolor

The pcolormesh()open in new window function can make a colored representation of a two-dimensional array, even if the horizontal dimensions are unevenly spaced. The contour()open in new window function is another way to represent the same data:

Example comparing pcolormesh()open in new window and contour()open in new window for plotting two-dimensional data


The hist()open in new window function automatically generates histograms and returns the bin counts or probabilities:


You can add arbitrary paths in Matplotlib using the matplotlib.pathopen in new window module:

Three-dimensional plotting

The mplot3d toolkit (see Getting startedopen in new window and 3D plottingopen in new window) has support for simple 3d graphs including surface, wireframe, scatter, and bar charts.

Thanks to John Porter, Jonathon Taylor, Reinier Heeres, and Ben Root for the mplot3d toolkit. This toolkit is included with all standard Matplotlib installs.


The streamplot()open in new window function plots the streamlines of a vector field. In addition to simply plotting the streamlines, it allows you to map the colors and/or line widths of streamlines to a separate parameter, such as the speed or local intensity of the vector field.

This feature complements the quiver()open in new window function for plotting vector fields. Thanks to Tom Flannaghan and Tony Yu for adding the streamplot function.


In support of the Phoenixopen in new window mission to Mars (which used Matplotlib to display ground tracking of spacecraft), Michael Droettboom built on work by Charlie Moad to provide an extremely accurate 8-spline approximation to elliptical arcs (see Arcopen in new window), which are insensitive to zoom level.

Bar charts

Use the bar()open in new window function to make bar charts, which includes customizations such as error bars:

You can also create stacked bars (bar_stacked.pyopen in new window), or horizontal bar charts (barh.pyopen in new window).

Pie charts

The pie()open in new window function allows you to create pie charts. Optional features include auto-labeling the percentage of area, exploding one or more wedges from the center of the pie, and a shadow effect. Take a close look at the attached code, which generates this figure in just a few lines of code.


The table()open in new window function adds a text table to an axes.

Scatter plots

The scatter()open in new window function makes a scatter plot with (optional) size and color arguments. This example plots changes in Google's stock price, with marker sizes reflecting the trading volume and colors varying with time. Here, the alpha attribute is used to make semitransparent circle markers.

GUI widgets

Matplotlib has basic GUI widgets that are independent of the graphical user interface you are using, allowing you to write cross GUI figures and widgets. See matplotlib.widgetsopen in new window and the widget examplesopen in new window.

Filled curves

The fill()open in new window function lets you plot filled curves and polygons:

Thanks to Andrew Straw for adding this function.

Date handling

You can plot timeseries data with major and minor ticks and custom tick formatters for both.

See matplotlib.tickeropen in new window and matplotlib.datesopen in new window for details and usage.

Log plots

The semilogx()open in new window, semilogy()open in new window and loglog()open in new window functions simplify the creation of logarithmic plots.

Thanks to Andrew Straw, Darren Dale and Gregory Lielens for contributions log-scaling infrastructure.

Polar plots

The polar()open in new window function generates polar plots.


The legend()open in new window function automatically generates figure legends, with MATLAB-compatible legend-placement functions.

Thanks to Charles Twardy for input on the legend function.

TeX-notation for text objects

Below is a sampling of the many TeX expressions now supported by Matplotlib's internal mathtext engine. The mathtext module provides TeX style mathematical expressions using FreeTypeopen in new window and the DejaVu, BaKoMa computer modern, or STIXopen in new window fonts. See the matplotlib.mathtextopen in new window module for additional details.

Matplotlib's mathtext infrastructure is an independent implementation and does not require TeX or any external packages installed on your computer. See the tutorial at Writing mathematical expressionsopen in new window.

Native TeX rendering

Although Matplotlib's internal math rendering engine is quite powerful, sometimes you need TeX. Matplotlib supports external TeX rendering of strings with the usetex option.


You can embed Matplotlib into pygtk, wx, Tk, or Qt applications. Here is a screenshot of an EEG viewer called pbrainopen in new window.


The lower axes uses specgram()open in new window to plot the spectrogram of one of the EEG channels.

For examples of how to embed Matplotlib in different toolkits, see:

XKCD-style sketch plots

Just for fun, Matplotlib supports plotting in the style of xkcd.

Subplot example

Many plot types can be combined in one figure to create powerful and flexible representations of data.

import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(2, 100)

fig, axs = plt.subplots(2, 2, figsize=(5, 5))
axs[0, 0].hist(data[0])
axs[1, 0].scatter(data[0], data[1])
axs[0, 1].plot(data[0], data[1])
axs[1, 1].hist2d(data[0], data[1])