20分钟
基本概念
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:它是整个packagematplotlib.pyplot:是matplotlib的一个module。它为底层的面向对象接口提供了一个state-machine interface。这个state-machine必要的时候隐式创建Figure和Axes,并维护current Figure和current Axespylab是一个便利的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()这样的风格使得在绘图事件中,每个角色都很清楚,数据的流动也很清楚。
学员评价