三、基本概念
matplotlib
被划分为不同的层次:matplotlib.pyplot
模块:位于matplotlib
的顶层,它是一个state-machine environment
。该模块中的很多函数是用于给当前Figure
的当前Axes
添加plot element
,比如line
、text
、image
等。它非常类似于Matlab
的用法。- 下一层是面向对象的接口:在这一层
pyplot
只是用部分函数来创建Figure
,然后通过该Figure
显式的创建Axes
,然后通过面向对象的接口在该Axes
上添加图形。极端情况下用户可以完全抛弃pyplot
而完全使用面向对象的接口。
对于非交互式绘图,官方文档推荐用
pyplot
创建Figure
,然后使用面向对象接口来绘图。matplotlib
的所有plotting function
期待输入numpy.array
或者numpy.ma.masked_array
类型的数据作为输入。某些长得像numpy.array
的数据比如numpy.matrix
类型的输入数据可能会导致matplotlib
工作异常。如果确实需要使用numpy.matrix
,你应该首先将它转换为numpy.array
matplotlib 、 pyplot 、 pylab 的关系:
matplotlib
:它是整个package
matplotlib.pyplot
:是matplotlib
的一个module
。它为底层的面向对象接口提供了一个state-machine interface
。这个state-machine
必要的时候隐式创建Figure
和Axes
,并维护current Figure
和current Axes
pylab
是一个便利的module
,它导入了matplotlib.pyplot
以及numpy
,它只是为了plot
以及math
方便而用。官方文档不推荐使用它。
pyplot.gcf()
:获取当前的figure
对象。pyplot.gca()
:获取当前的Axes
对象代码风格:官方文档不推荐
MATLAB
风格的代码。因为MATLAB
风格代码维护了全局状态,你执行同一个plot
多次可能会发现结果是不同的。官方文档推荐使用如下风格:import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(...)
ax.show()
这样的风格使得在绘图事件中,每个角色都很清楚,数据的流动也很清楚。