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

4 投票
3 回答
6065 浏览
提问于 2025-04-16 15:56

我用下面这种方式导入了 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 默认不导入它)。

撰写回答