I'm not really new to matplotlib
and I'm deeply ashamed to admit I have always used it as a tool for getting a solution as quick and easy as possible. So I know how to get basic plots, subplots and stuff and have quite a few code which gets reused from time to time...but I have no "deep(er) knowledge" of matplotlib
.
Recently I thought I should change this and work myself through some tutorials. However, I am still confused about matplotlibs plt
, fig(ure)
and ax(arr)
. What is really the difference?
In most cases, for some "quick'n'dirty' plotting I see people using just pyplot as plt
and directly plot with plt.plot
. Since I am having multiple stuff to plot quite often, I frequently use f, axarr = plt.subplots()
...but most times you see only code putting data into the axarr
and ignoring the figure f
.
So, my question is: what is a clean way to work with matplotlib? When to use plt
only, what is or what should a figure
be used for? Should subplots just containing data? Or is it valid and good practice to everything like styling, clearing a plot, ..., inside of subplots?
I hope this is not to wide-ranging. Basically I am asking for some advice for the true purposes of plt
<-> fig
<-> ax(arr)
(and when/how to use them properly).
Tutorials would also be welcome. The matplotlib documentation is rather confusing to me. When one searches something really specific, like rescaling a legend, different plot markers and colors and so on the official documentation is really precise but rather general information is not that good in my opinion. Too much different examples, no real explanations of the purposes...looks more or less like a big listing of all possible API methods and arguments.
A Figure object is the outermost container for a matplotlib graphic, which can contain multiple Axes objects. One source of confusion is the name: an Axes actually translates into what we think of as an individual plot or graph (rather than the plural of “axis,” as we might expect).
Axes object is the region of the image with the data space. A given figure can contain many Axes, but a given Axes object can only be in one Figure. The Axes contains two (or three in the case of 3D) Axis objects. The Axes class and its member functions are the primary entry point to working with the OO interface.
Matplotlib is a library in Python and it is numerical – mathematical extension for NumPy library. Pyplot is a state-based interface to a Matplotlib module which provides a MATLAB-like interface. There are various plots which can be used in Pyplot are Line Plot, Contour, Histogram, Scatter, 3D Plot, etc.
MatPlotLib with PythonPlot − Plot helps to plot just one diagram with (x, y) coordinates. Axes − Axes help to plot one or more diagrams in the same window and sets the location of the figure.
pyplot
is the 'scripting' level API in matplotlib (its highest level API to do a lot with matplotlib). It allows you to use matplotlib using a procedural interface in a similar way as you can do it with Matlab. pyplot
has a notion of 'current figure' and 'current axes' that all the functions delegate to (@tacaswell dixit). So, when you use the functions available on the module pyplot
you are plotting to the 'current figure' and 'current axes'.
If you want 'fine-grain' control of where/what your are plotting then you should use an object oriented API using instances of Figure
and Axes
.
Functions available in pyplot
have an equivalent method in the Axes
.
From the repo anatomy of matplotlib:
Figure
is the top-level container in this hierarchy. It is the overall window/page that everything is drawn on. You can have multiple independent figures and Figure
s can contain multiple Axes.But...
Most plotting occurs on an Axes
. The axes is effectively the area that we plot data on and any ticks/labels/etc associated with it. Usually we'll set up an Axes
with a call to subplot (which places Axes
on a regular grid), so in most cases, Axes
and Subplot
are synonymous.
Each Axes
has an XAxis and a YAxis. These contain the ticks, tick locations, labels, etc.
If you want to know the anatomy of a plot you can visit this link.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With