# Matplotlib Figures, Plots, and Axes

Quick Definition

A figure contains one or more groups of axes.

Each Axes, which can be 2-dimensional or 3-dimensional, contains zero or more plots.

A plot is the thing we normally call "graph" or "chart".

# Figure

The Figure is the top level container. Inside a figure we can include one or more Axes classes, each of which can have one or more plots.

The Figure is what contains everything else, and it is also what we show when we want to display the graph to the screen:

import matplotlib.pyplot as plt

plt.figure()
plt.show()

Here we've used the pyplot library to create a new Figure. When we do this, pyplot automatically "selects" the figure, and it becomes the active figure. Every other function in the pyplot library will act on that figure until another one is selected.

But note if you run that code, you'll see no output.

The figure is empty, so matplotlib doesn't display a window.

We must first add at least a set of axes to the figure.

# Axes

The Axes, which is a matplotlib class, is where plots are drawn. You can have multiple plots drawn on a single pair of axes, as below:

Two plots in one set of axes

Or you can also have multiple Axes in one figure, as below:

Two sets of axes, each with their own plot

Let's start off by adding a set of 2-dimensional axes to our figure:

import matplotlib.pyplot as plt

plt.figure()
plt.axis([0, 6, 0, 20])
plt.show()

Image of axes on their own

Here we've used plt.axis() to define the values in our x and y axes. The x axis goes from 0 to 6, and the y axis goes from 0 to 20.

Note that plt.axis() acts on the currently active figure, which is the one that got created when we called plt.figure().

At the moment there's nothing drawn in the canvas though, so let's do that!

# Plot

Plots can be drawn on a set of axes, and each plot needs to specify data points for the axes that it is drawn on.

For example, if we have 2-dimensional axes, then for each data point we need to specify its x and y coordinates.

import matplotlib.pyplot as plt

plt.figure()
plt.axis([0, 6, 0, 20])
plt.plot([1, 2, 3, 4], [3, 5, 9, 25])
plt.show()

Here, we use .plot() to draw 4 points in our axes. The points drawn are:

  • (1, 3)
  • (2, 5)
  • (3, 9)
  • (4, 25)

Note that the y axis only goes up to 20 though, so therefore this plot will be clipped at 20 in the y axis, and it won't be shown in its entirety:

Image of clipped line graph because it surpasses the axis

If we don't specify the axes dimensions ourselves, .plot() will do it for us based on the provided data:

import matplotlib.pyplot as plt

plt.figure()
plt.plot([1, 2, 3, 4], [3, 5, 9, 25])
plt.show()

Full line graph

Note the y axis here goes to 25, since that's the maximum value in our data set.