Reputation: 78498
I can plot in Python using either:
import matplotlib
matplotlib.pyplot.plot(...)
Or:
import pylab
pylab.plot(...)
Both of these use matplotlib
.
Which is recommend as the correct method to plot? Why?
Upvotes: 107
Views: 42617
Reputation: 3445
The official documentation clearly recommends to use matplotlib.pyplot
.
The API documentation still mentions the pylab
module but advises against using it.1
Since heavily importing into the global namespace may result in unexpected behavior, the use of pylab is strongly discouraged. Use
matplotlib.pyplot
instead.
The Quick start guide also disapproves using the pylab
module.
You may find older examples that use the pylab interface, via from pylab import *. This approach is strongly deprecated.
1. As far as I can see this recommendation was added on February 7th, 2020
Upvotes: 24
Reputation: 87376
Official docs: Matplotlib, pyplot and pylab: how are they related?
Both of those imports boil down do doing exactly the same thing and will run the exact same code, it is just different ways of importing the modules.
Also note that matplotlib
has two interface layers, a state-machine layer managed by pyplot
and the OO interface pyplot
is built on top of, see How can I attach a pyplot function to a figure instance?
pylab
is a clean way to bulk import a whole slew of helpful functions (the pyplot
state machine function, most of numpy
) into a single name space. The main reason this exists (to my understanding) is to work with ipython
to make a very nice interactive shell which more-or-less replicates MATLAB (to make the transition easier and because it is good for playing around). See pylab.py
and matplotlib/pylab.py
At some level, this is purely a matter of taste and depends a bit on what you are doing.
If you are not embedding in a gui (either using a non-interactive backend for bulk scripts or using one of the provided interactive backends) the typical thing to do is
import matplotlib.pyplot as plt
import numpy as np
plt.plot(....)
which doesn't pollute the name space. I prefer this so I can keep track of where stuff came from.
If you use
ipython --pylab
this is equivalent to running
from pylab import *
It is now recommended that for new versions of ipython
you use
ipython --matplotlib
which will set up all the proper background details to make the interactive backends to work nicely, but will not bulk import anything. You will need to explicitly import the modules want.
import numpy as np
import matplotlib.pyplot as plt
is a good start.
If you are embedding matplotlib
in a gui you don't want to import pyplot as that will start extra gui main loops, and exactly what you should import depends on exactly what you are doing.
Upvotes: 114