三、基本概念

  1. matplotlib被划分为不同的层次:

    • matplotlib.pyplot模块:位于matplotlib的顶层,它是一个state-machine environment。该模块中的很多函数是用于给当前Figure的当前Axes添加plot element,比如linetextimage等。它非常类似于Matlab的用法。
    • 下一层是面向对象的接口:在这一层pyplot只是用部分函数来创建Figure,然后通过该Figure显式的创建Axes,然后通过面向对象的接口在该Axes上添加图形。极端情况下用户可以完全抛弃pyplot而完全使用面向对象的接口。

    对于非交互式绘图,官方文档推荐用pyplot创建Figure,然后使用面向对象接口来绘图。

  2. matplotlib的所有plotting function期待输入numpy.array或者numpy.ma.masked_array类型的数据作为输入。某些长得像numpy.array的数据比如numpy.matrix类型的输入数据可能会导致matplotlib工作异常。如果确实需要使用numpy.matrix,你应该首先将它转换为numpy.array

  3. matplotlib 、 pyplot 、 pylab 的关系:

    • matplotlib:它是整个package
    • matplotlib.pyplot:是matplotlib的一个module。它为底层的面向对象接口提供了一个state-machine interface。这个state-machine必要的时候隐式创建FigureAxes,并维护current Figurecurrent Axes
    • pylab是一个便利的module,它导入了matplotlib.pyplot以及numpy,它只是为了plot以及math方便而用。官方文档不推荐使用它。

    pyplot.gcf():获取当前的figure对象。pyplot.gca():获取当前的Axes对象

  4. 代码风格:官方文档不推荐 MATLAB风格的代码。因为MATLAB风格代码维护了全局状态,你执行同一个plot多次可能会发现结果是不同的。官方文档推荐使用如下风格:

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. fig=plt.figure()
    4. ax=fig.add_subplot(111)
    5. ax.plot(...)
    6. ax.show()

    这样的风格使得在绘图事件中,每个角色都很清楚,数据的流动也很清楚。