我这样导入matplotlib:
import matplotlib as mpl
Run Code Online (Sandbox Code Playgroud)
当我运行以下代码时,抛出了'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()
Run Code Online (Sandbox Code Playgroud)
当我matplotlib以另一种方式导入时,没有出现错误 :
import matplotlib.pylab as pl
Run Code Online (Sandbox Code Playgroud)
有人知道发生了什么吗?
Chi*_*chi 10
要以非交互模式绘图,您应该使用模块pyplot,而不是pylab.
from matplotlib import pyplot
import numpy
pyplot.plot(range(1,100), numpy.sin(range(1,100)))
pyplot.show()
Run Code Online (Sandbox Code Playgroud)
该模块pylab通常不用作matplotlib的子模块,而是用作顶级模块.通常,它以交互模式使用,将numpy,scipy和matplotlib的几个部分组合到一个命名空间中.
>>> from pylab import *
>>> plot(range(1,100), sin(range(1,100)))
>>> show()
Run Code Online (Sandbox Code Playgroud)
默认情况下,并不总是导入子模块.您可以导入pylab与
import matplotlib as mpl
import matplotlib.pylab # Loads the pylab submodule as well
# mpl.pylab is now defined
Run Code Online (Sandbox Code Playgroud)
这就是为什么要import matplotlib.pylab as pl为您解决问题的原因.
默认情况下不导入子模块会带来更快的加载时间.它也不会使用未使用的子模块名称污染主模块名称空间.模块的创建者可以定义默认加载哪些子模块(因为pylab它很重,默认情况下不会导入matplotlib).