学科分类
目录
数据分析

通过subplots()函数创建多个子图

如果希望一次性创建一组子图,则可以通过subplots()函数进行实现。subplots()函数的语法格式如下:

matplotlib.pyplot.subplots(nrows = 1,ncols = 1,sharex = False,sharey = False,
                           squeeze = True,subplot_kw = None,gridspec_kw = None,** fig_kw)

常用的参数含义如下:

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

(2) sharex,sharey:表示控制x或y轴是否共享。若设为“True”或“all”,则表示x或y轴在所有的子图中共享;若设为“False”或“None”,则每个子图的x或y轴是独立的;若设为“row”,则每个子图沿行方向将共享x轴或y轴;若设为“col”,则每个子图沿列方向将共享x轴或y轴。

subplots()函数会返回一个元组,元组的第一个元素为Figure对象(画布),第二个元素为Axes对象(子图,包含坐标轴和画的图)或Axes对象数组。如果创建的是单个子图,则返回的是一个Axes对象,否则返回的是一个Axes对象数组。

接下来,我们使用subplots()函数创建4个子图,并在每个子图上绘制一些简单的图形,具体代码如下。

In [6]: # 生成包含1100之间所有整数的数组
        nums = np.arange(1, 101)
        # 分成2*2的矩阵区域,返回子图数组axes
        fig, axes = plt.subplots(2, 2)
        ax1 = axes[0, 0]  # 根据索引[00]从Axes对象数组中获取第1个子图
        ax2 = axes[0, 1]  # 根据索引[01]从Axes对象数组中获取第2个子图
        ax3 = axes[1, 0]  # 根据索引[10]从Axes对象数组中获取第3个子图
        ax4 = axes[1, 1]  # 根据索引[11]从Axes对象数组中获取第4个子图
        # 在选中的子图上作图
        ax1.plot(nums, nums)
        ax2.plot(nums, -nums)
        ax3.plot(nums, nums**2)
        ax4.plot(nums, np.log(nums))
        plt.show()

在上述示例中,首先生成了一个包含1~100之间所有整数的数组nums,作为绘图用的数据,然后调用subplots()函数将整个绘图区域划分为2*2的矩阵区域,即创建了4个子图,它们全部存放在axes数组中,接着使用索引从axes数组中获取每个子图,调用plot()函数在这些子图上分别作图,其中第1个子图上画的正比例函数y=x的直线,第2个子图上画的是正比例函数y=-x的直线,第3个子图上画的是y=x^2的曲线,第4个子图上画的是y=log(x)的曲线。

运行结果如图1所示。

img

图1 运行结果

注意:

通过subplots()函数创建的多个图表,在Jupyter Notebook中可以正常显示,因此官方推荐使用这种方式创建多个图表。

点击此处
隐藏目录