Note
Go to the end to download the full example code.
The Lifecycle of a Plot#
This tutorial aims to show the beginning, middle, and end of a single visualization using Matplotlib. We'll begin with some raw data and end by saving a figure of a customized visualization. Along the way we try to highlight some neat features and best-practices using Matplotlib.
Note
This tutorial is based on this excellent blog post by Chris Moffitt. It was transformed into this tutorial by Chris Holdgraf.
A note on the explicit vs. implicit interfaces#
Matplotlib has two interfaces. For an explanation of the trade-offs between the explicit and implicit interfaces see Matplotlib Application Interfaces (APIs).
In the explicit object-oriented (OO) interface we directly utilize instances of
axes.Axes to build up the visualization in an instance of
figure.Figure. In the implicit interface, inspired by and modeled on
MATLAB, we use a global state-based interface which is encapsulated in the
pyplot module to plot to the "current Axes". See the pyplot
tutorials for a more in-depth look at the
pyplot interface.
Most of the terms are straightforward but the main thing to remember is that:
We call methods that do the plotting directly from the Axes, which gives us much more flexibility and power in customizing our plot.
Note
In general, use the explicit interface over the implicit pyplot interface for plotting.
Our data#
We'll use the data from the post from which this tutorial was derived. It contains sales information for a number of companies.
import matplotlib.pyplot as plt
import numpy as np
data = {'Barton LLC': 109438.50,
'Frami, Hills and Schmidt': 103569.59,
'Fritsch, Russel and Anderson': 112214.71,
'Jerde-Hilpert': 112591.43,
'Keeling LLC': 100934.30,
'Koepp Ltd': 103660.54,
'Kulas Inc': 137351.96,
'Trantow-Barrows': 123381.38,
'White-Trantow': 135841.99,
'Will LLC': 104437.60}
group_data = list(data.values())
group_names = list(data.keys())
group_mean = np.mean(group_data)
Getting started#
This data is naturally visualized as a barplot, with one bar per
group. To do this with the object-oriented approach, we first generate
an instance of figure.Figure and
axes.Axes. The Figure is like a canvas, and the Axes
is a part of that canvas on which we will make a particular visualization.
Note
Figures can have multiple Axes on them. For information on how to do this, see the Tight Layout tutorial.
fig, ax = plt.subplots()