刚好最近准备整理一下matplotlib的一些心得,这里先码一部分。
现在你这里建立了一个大的主图Figure对象,下面包含一个2x2的4张子图Axes对象。如果直接使用plt方法,由于它只会作用在活动的子图上,所以只会影响到整个子图序列的最后一张图上。
这里,解决的方案至少有两个:第一种,就是换一个思路,通过指定子图的方式,调用子图的绘图方法来绘制;第二种,就是更换活动子图的焦点,把焦点切换到别的子图上然后用plt方法绘制。
第一种:
一般创建子图的时候,我们会用fig, ax = plt.subplots(2,2)这样的句法。这里其实是调用plt函数下的subplots命令创建了一张大图,以及大图下的2x2共4张小图的命令。所以这个命令其实做了两件事,同时生成了一个元组,包含fig这个“大图”对象,以及ax这个2x2子图对象。
当需要设置某个子图对象的时候,就可以用ax[x][y]这样的格式来指定具体是哪个子图。因为我们创建子图的时候用的是 (2,2)这样的格式,所以子图组其实是一个2x2的二维结构,于是指定子图的时候我们就要用[x][y]这样的调用二维数组的方式。
如果在一开始用plt.subplots(4)这样的语法,那么子图会默认排成一列。这个时候,用ax[x]这种一维数组的调用方式就可以了。
第二种:
另一方面,我们也可以用plt.subplot()命令来指定到底是哪一个子图subplot。注意前面是创建多个子图,用的subplots,这里是指定到某个具体的子图,用的是subplot。具体的用法是plt.subplot(行列索引),比如p