为什么matplotlib没有属性'pylab'?

时间:2011-04-18 04:12:32

标签: python matplotlib

我以这样的方式导入matplotlib

import matplotlib as mpl

当我运行以下代码时,错误地说'module'对象没有属性'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 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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)。

答案 2 :(得分:-1)

如果您尝试导入的模块没有__init__.py文件,通常会出现此错误。我的安装也遇到了这个错误。我想你必须接受你必须从matplotlib中单独导入matplotlib.pylab。