学科分类
目录
数据分析

通过subplot()函数创建单个子图

很多时候,我们希望在同一个画布上绘制多个图形,而不是在多个画布中绘制多个图形。Figure对象允许划分为多个绘图区域,每个绘图区域都是一个Axes对象,它拥有属于自己的坐标系统,被称为子图。

为了能够让大家更好地区分Figure与Axes,接下来,通过一张示意图来描述两者之间的关系,具体如图1所示。

img

图1 Figure与Axes的关系示意图

要想在画布上创建一个子图,则可以通过subplot()函数实现。subplot()函数的语法格式如下:

subplot(nrows, ncols, index, **kwargs)

参数表示的含义如下:

(1) nrows,ncols:表示子区网格的行数、列数。

(2) index:表示矩阵区域的索引。

subplot()函数会将整个绘图区域等分为“nrows (行)* ncols(列)”的矩阵区域,之后按照从左到右、从上到下的顺序对每个区域进行编号。其中,位于左上角的子区域编号为1,依次递增。

例如,整个绘制区域划分为2*2(两行两列)的矩阵区域,每个区域编号如图2所示。

img

图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所示。

img
图3 运行结果

注意:

通过subplot()函数可以规划Figure对象划分为多少个子图,但每调用一次该函数只会创建一个子图。

点击此处
隐藏目录