两种图画接口

阅读: 5194     评论:1

Matplotlib有个容易让人迷惑和混淆的情况,就是它的两种画图接口:一是便捷的MATLAB风格接口,一个是功能更强大的面向对象接口。

  • MATLAB接口

MATLAB的历史渊源,很多人都曾经学过用过。Matplotlib最初作为MATLAB的Python替代品,许多语法都类似,所以上手快,用得熟,自然而然就成习惯了。MATLAB风格的工具位于pyplot接口中,比如:

x = np.linspace(0,10,100) # 生成点列表
plt.figure() # 创建图形
plt.subplot(2,1,1)  # 行、列、子图编号
plt.plot(x,np.sin(x))
plt.subplot(2,1,2)
plt.plot(x,np.cos(x)) # 第二个子图

这种接口最重要的特性是有状态的,他会持续跟踪当前的图形和坐标轴,所有plt命令都可以使用。你可以使用plt.gcf()方法获取当前图形和plt.gca()获取当前坐标轴的具体信息。

但是这种接口也有问题。比如,当创建第二个子图的时候,怎么才能回到第一个子图,并增加新内容呢?虽然也能实现,但方法比较复杂。而下面的方式则不存在这个问题。

  • 面向对象的接口

这种方式可以适应更加复杂的场景,更好地控制你的图形。画图函数不再受到当前‘活动’图形或者坐标轴的限制,而变成了显式的Figure和Axes的方法。下面是个例子:

fig, ax = plt.subplots(2) # ax是包含两个Axes对象的数组
ax[0].plot(x,np.sin(x)) # 在每个对象上调用plot()方法
ax[1].plot(x,np.cos(x))

img

这两种使用方式你必须都会用,因为它们随机出现在代码、文献、测试场景中,你没得选。


 保存图形 使用中文 

评论总数: 1


点击登录后方可评论

如果这样写fig,ax=plt.subplots(),ax就是一个Axes对象。