简介
在matplotlib绘图过程中,经常会出现axes绘图和pyplot绘图这两种方法,但是如果不搞清楚它们的区别,往往会得不到你想要的图形。所谓axes绘图是指调用axes对象(坐标轴对象)去完成绘图任务,而pyplot绘图就是常规的简单绘图方式。在绘制多个子图的时候,往往需要指定在哪个子图进行绘图,axes和pyplot的使用跟你选择的绘制子图的方法有关。
subplots方法
subplots方法可以一次性绘制几个子图,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>>import matplotlib.pyplot as plt >>>import numpy as np >>>fig, axes = plt.subplots(2, 2) >>>ax1 = axes[0, 0] >>>ax2 = axes[0, 1] >>>ax3 = axes[1, 0] >>>ax4 = axes[1, 1] >>>ax2.plot(np.arange(4)) >>>plt.scatter(np.arange(4), np.arange(4)) >>>plt.show() |
通过subplots方法得到画布fig和一个包含所有字坐标轴的数组axes。使用切片方法能够获得里面的每个子坐标轴。接下来调用相应坐标轴的plot方法,在ax2坐标轴绘制了直线图;如果直接使用 plt.scatter ,我们会发现在最后一个子图中绘制了散点图,这就是区别,plt方法默认是在最后一个建立的坐标轴上绘图。得到如下图形:
即使是将该代码放到前面:
1 2 3 4 5 6 7 8 9 |
>>>fig, axes = plt.subplots(2, 2) >>>ax1 = axes[0, 0] >>>ax2 = axes[0, 1] >>>ax3 = axes[1, 0] >>>plt.scatter(np.arange(4), np.arange(4)) >>>ax4 = axes[1, 1] >>>ax2.plot(np.arange(4)) >>>plt.show() |
绘制出来的图片还是跟上面一样。那能不能使用plt在指定子坐标轴下绘图呢?当然是可以的,这时就需要使用subplot方法,以代码块的方式书写。
subplot方法
通过subplot方法逐一添加子坐标轴并完成绘图:
1 2 3 4 5 6 7 |
>>>ax1 = plt.subplot(2, 2, 1) >>>ax2 = plt.subplot(2, 2, 2) >>>plt.plot(np.arange(4)) >>>ax3 = plt.subplot(2, 2, 3) >>>plt.scatter(np.arange(4), np.arange(4)) >>>ax4 = plt.subplot(2, 2, 4) >>>plt.show() |
这种添加子坐标轴的方式,就跟plt方法的顺序有关系了,默认plt在对应的子坐标轴下完成绘图。得到如下图形:
ax参数
在plt的很多方法中都有 ax 参数,它可以用来指定在某个具体的坐标轴上绘图。比如:
1 |
>>>plt.colorbar(ax=ax1) |
总结
本文再次介绍了axes和pyplot方法的使用,具体跟调用的绘图方法有关:subplots方法最好使用axes方法绘图,它是先搭框架再绘图;而subplot方法则是通过代码块一步步绘图,逻辑非常清晰,并且在代码块中可以使用plt方法。
讲得真好,终于弄懂了,谢谢.