为什么matplotlib没有属性'pylab'?
我用下面这种方式导入了 matplotlib
:
import matplotlib as mpl
当我运行以下代码时,出现了一个错误,提示'module' object has no attribute 'pylab'。
x = np.arange(0,10,0.01) # import numpy as np
y = np.sin(x)
mpl.pylab.plot(x,y)
mpl.pylab.show()
但是当我用另一种方式导入 matplotlib
时,没有出现任何错误:
import matplotlib.pylab as pl
有没有人知道这是怎么回事?
3 个回答
-1
你通常会遇到这个错误,如果你想导入的模块里没有一个叫做 __init__.py
的文件。我在我的安装中也遇到过这个错误。我觉得你只需要接受一个事实,那就是你必须单独从 matplotlib 导入 matplotlib.pylab。
10
要在非交互模式下绘图,你应该使用pyplot
模块,而不是pylab
。
from matplotlib import pyplot
import numpy
pyplot.plot(range(1,100), numpy.sin(range(1,100)))
pyplot.show()
模块pylab
通常不是作为matplotlib的子模块使用,而是作为一个独立的模块。一般来说,它是在交互模式下使用的,目的是把numpy、scipy和matplotlib的多个部分整合到一个命名空间中。
>>> from pylab import *
>>> plot(range(1,100), sin(range(1,100)))
>>> show()
5
子模块并不是默认就会被导入。你可以通过下面的方式导入 pylab
:
import matplotlib as mpl
import matplotlib.pylab # Loads the pylab submodule as well
# mpl.pylab is now defined
所以,使用 import matplotlib.pylab as pl
解决了你的问题。
不默认导入子模块可以让加载速度更快。而且,这样也不会让主模块的命名空间里充满那些没用的子模块名字。模块的创建者可以决定哪些子模块是默认加载的(因为 pylab
比较大,所以 matplotlib
默认不导入它)。