通过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]: # 生成包含1~100之间所有整数的数组
nums = np.arange(1, 101)
# 分成2*2的矩阵区域,返回子图数组axes
fig, axes = plt.subplots(2, 2)
ax1 = axes[0, 0] # 根据索引[0,0]从Axes对象数组中获取第1个子图
ax2 = axes[0, 1] # 根据索引[0,1]从Axes对象数组中获取第2个子图
ax3 = axes[1, 0] # 根据索引[1,0]从Axes对象数组中获取第3个子图
ax4 = axes[1, 1] # 根据索引[1,1]从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所示。
图1 运行结果
注意:
通过subplots()函数创建的多个图表,在Jupyter Notebook中可以正常显示,因此官方推荐使用这种方式创建多个图表。