Matplotlib有个容易让人迷惑和混淆的情况,就是它的两种画图接口:一是便捷的MATLAB风格接口,一个是功能更强大的面向对象接口。
MATLAB的历史渊源,很多人都曾经学过用过。Matplotlib最初作为MATLAB的Python替代品,许多语法都类似,所以上手快,用得熟,自然而然就成习惯了。MATLAB风格的工具位于pyplot接口中,比如:
这种接口最重要的特性是有状态的,他会持续跟踪当前的图形和坐标轴,所有plt命令都可以使用。你可以使用plt.gcf()方法获取当前图形和plt.gca()获取当前坐标轴的具体信息。
但是这种接口也有问题。比如,当创建第二个子图的时候,怎么才能回到第一个子图,并增加新内容呢?虽然也能实现,但方法比较复杂。而下面的方式则不存在这个问题。
这种方式可以适应更加复杂的场景,更好地控制你的图形。画图函数不再受到当前‘活动’图形或者坐标轴的限制,而变成了显式的Figure和Axes的方法。下面是个例子:
这两种使用方式你必须都会用,因为它们随机出现在代码、文献、测试场景中,你没得选。