matplotlib.pyplot vs matplotlib.pylab

时间:2014-05-03 23:49:49

标签: python matplotlib

我通常使用以下包来创建我的图:matplotlib.pylab。但是,还有一个名为matplotlib.pyplot的包。

在使用它们时,我无法发现两者之间的任何差异。所以我的问题如下:

matplotlib.pylabmatplotlib.pyplot之间有什么区别。在哪种情况下你会建议一个在另一个上面?

1 个答案:

答案 0 :(得分:13)

the FAQ

  

Pyplot为底层绘图提供状态机界面   matplotlib中的库。这意味着数字和轴是隐含的   并自动创建以实现所需的情节....

     

Pylab将pyplot功能(用于绘图)与numpy结合起来   a中的功能(用于数学和用于数组)   单个命名空间,使该命名空间(或环境)更加强大   MATLAB样。例如,人们可以只调用sin和cos函数   就像你可以在MATLAB中,以及具有的所有功能   pyplot。

     

pyplot界面通常是非交互式的首选   绘图(即脚本)。 pylab界面很方便   交互式计算和绘图,因为它最大限度地减少了打字。 (我的重点。)

请注意

from pylab import *

也执行

from numpy import *

这会覆盖许多内置的Python函数,例如:

In [5]: import __builtin__
In [6]: import numpy as np

In [5]: {name for name in set(dir(np)).intersection(dir(__builtin__)) if not name.startswith('__') and getattr(__builtin__, name) != getattr(np, name)}
Out[5]: {'abs', 'all', 'any', 'max', 'min', 'round', 'sum'}

因此,我不喜欢from pylab import *(或任何模块的真正from module import *)因为它使众所周知的心爱的Python名称以意想不到的方式表现(如果你不总是记住那个from numpy import *污染了全局命名空间。)

例如,

In [32]: np.all([np.arange(3), np.arange(3)])
Out[32]: False

,而

In [33]: all([np.arange(3), np.arange(3)])
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()