python绘制好几个子图_Python使用matplotlib:subplot绘制多个子图

以面向对象方式绘图

在使用Matplotlib进行绘图的时候,对于不太复杂的绘图,我们可以直接使用plot()函数直接绘制,但是实际上,Matplotlib是一个面向对象的绘图库,我们绘制的图像中,每条曲线,每个边框等等都对应一个对象,因此,可以从面向对象的角度考虑绘图,plt.figre()就创建了一个FIgure()对象,对于这一点,我们可以查看一下:

In [3]: fig = plt.figure()

In [4]: fig

Out[4]:

这里有两个概念,一个是Figure图表对象,另一个是Axes子图对象,Figure就像是一张画布,但是在画布上我们可以分割开好几块区域,每一块区域就相当于一个子图,这两个对象我们可以通过gcf()(Get Current Figure)和gca()(Get Current Axes)来获得。那么,如何在一张Figure中绘制多个子图呢?这里要用到subplot()函数

subplot()函数

调用格式如下:

subplot( numRows, numCols, plotNum)

整个Figure会被划分为numRows行,numCols列,并从左往右,从上往下编号为1,2…也就是说plotNum指定了子图所在的位置,此外,如果三个参数的都小于10,则可以简写在一起,例如:subplot(4, 3, 2)也可以写成 subplot(432)

例如:

import numpy as np

import matplotlib.pyplot as plt

plt.figure()

plt.subplot(221, facecolor='r') #facecolor指定背景颜色 在之前的Python版本使用的是axisbg 现在已经改成了facecolor

plt.subplot(222, facecolor='b')

plt.subplot(223, facecolor='g')

plt.subplot(224, facecolor='y')

plt.show()

效果如下:

python绘制好几个子图_Python使用matplotlib:subplot绘制多个子图_第1张图片

也有简单一点的写法:

for idx,color in enumerate("rbgy"):

plt.subplot(221+idx, facecolor = color)

plt.show()

这中写法我的理解是“相对”,将字符串的每个字符序号给出分别是0,1,2,3,作为相对于(221)第一个位置的偏移量,所以用一个循环就可以轻松写出来了。

除了这样的绘图之外,我们有时候会用到不想这么整齐的图表,比如第一行均分,分成两张子图,第二行就一张子图了,原理是一样的,例如:

plt.figure()

plt.subplot(221) #指定分为2行2列 绘制在第一个位置

plt.subplot(222) #指定分为2行2列 绘制在第二个位置

plt.subplot(212) #指定分为2行1列 绘制在第二个位置 2:2行 1:1列 2:表示如果分为2行1列的话位置是第二个

plt.show()

效果如下:

python绘制好几个子图_Python使用matplotlib:subplot绘制多个子图_第2张图片

logo.gif

你可能感兴趣的:(python绘制好几个子图)