通过subplot()函数创建单个子图
很多时候,我们希望在同一个画布上绘制多个图形,而不是在多个画布中绘制多个图形。Figure对象允许划分为多个绘图区域,每个绘图区域都是一个Axes对象,它拥有属于自己的坐标系统,被称为子图。
为了能够让大家更好地区分Figure与Axes,接下来,通过一张示意图来描述两者之间的关系,具体如图1所示。
图1 Figure与Axes的关系示意图
要想在画布上创建一个子图,则可以通过subplot()函数实现。subplot()函数的语法格式如下:
subplot(nrows, ncols, index, **kwargs)
参数表示的含义如下:
(1) nrows,ncols:表示子区网格的行数、列数。
(2) index:表示矩阵区域的索引。
subplot()函数会将整个绘图区域等分为“nrows (行)* ncols(列)”的矩阵区域,之后按照从左到右、从上到下的顺序对每个区域进行编号。其中,位于左上角的子区域编号为1,依次递增。
例如,整个绘制区域划分为2*2(两行两列)的矩阵区域,每个区域编号如图2所示。
图2 分成2*2的矩阵区域
需要注意的是,如果nrows、ncols和index这三个参数的值都小于10,则可以把它们简写为一个实数。例如,subplot(323)和subplot(3,2,3)是等价的。
为了让读者更好地理解,接下来,通过一段示例来演示如何创建单个子图,并在子图上绘制简单的图形,具体代码如下。
In [5]: nums = np.arange(0, 101) # 生成0~100的数组
# 分成2*2的矩阵区域,占用编号为1的区域,即第1行第1列的子图
plt.subplot(221)
# 在选中的子图上作图
plt.plot(nums, nums)
# 分成2*2的矩阵区域,占用编号为2的区域,即第1行第2列的子图
plt.subplot(222)
# 在选中的子图上作图
plt.plot(nums, -nums)
# 分成2*1的矩阵区域,占用编号为2的区域,即第2行的子图
plt.subplot(212)
# 在选中的子图上作图
plt.plot(nums, nums**2)
# 在本机上显示图形
plt.show()
上述示例中,首先使用arange()函数生成了一个包含0~100之间所有整数的数组nums作为绘图的数据,然后使用subplot()函数将整个绘图区域划分为2*2
的矩阵区域,并选中位于第1行第1列的子图,在这个子图上绘制正比例函数(y=x)的图像,之后选中位于第1行第2列的子图,并在这个子图上绘制正比例函数(y=-x)的图像,最后将整个绘图区域划分为2*1的矩阵区域,选中位于第2行的子图,在这个子图上绘制y=x^2的曲线。
运行结果如图3所示。
图3 运行结果
注意:
通过subplot()函数可以规划Figure对象划分为多少个子图,但每调用一次该函数只会创建一个子图。