我通常使用以下包来创建我的图:matplotlib.pylab
。但是,还有一个名为matplotlib.pyplot
的包。
在使用它们时,我无法发现两者之间的任何差异。所以我的问题如下:
包matplotlib.pylab
和matplotlib.pyplot
之间有什么区别。在哪种情况下你会建议一个在另一个上面?
答案 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()