matplotlib.pyplot中subplots()的用法
在数据分析过程中,我们经常需要将数据可视化。这个过程中,人们经常会使用到 subplots 这个函数。今天我们就来介绍下 subplots 的一些用法和有点。
在很多数据分析的学习示例中,我们经常看到下面这段代码:
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
上面的 plt.subplots() 函数见名知意,就是画多个图的意思。这个函数返回的是一个元组(tuple)。这个元组中包含了一个figure对象和axes对象集合。因此,当我们按上面fig, ax = plt.subplots()
这样的用法时,我们相当于把返回的 tuple 进行解压(unpack)成 fig 和 ax 两个变量。fig 变量可以让我们可以修改 figure 层级(figure-level)的属性或者将 figure 保存成图片,例如:fig.savefig('thefilename.png')
。ax 变量中保存着所有子图的可操作 axe 对象。
上面的写法相当于是下面这种写法的精简版:
fig = plt.figure()
ax = fig.add_subplot(111)
上面的例子是只有一个子图的情况。那么解压后的 ax 变量中也只是存贮着一个 axe 对象。接下来我们来尝试多个子图的情况:
fig, ax = plt.subplots(nrows=2, ncols=2)
print(ax.shape)
输出是:
(2, 2)
从中我们可以看出,plt.subplots() 返回的tuple中包含两个元素,其中第二个元素时一组subplots对象的集合(axes)。并且,第二个元素的 shape 和 (nrows, ncols) 保持一致。因此如果我们想将其解压(unpack)的话,可以用下面的写法代替:
fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2)
最后,我们来介绍下 plt.subplot 和 plt.subplots 之间的区别。
subplots 一次性创建并返回所有的子图和其 axe 对象。subplot则是分开多次添加子图。每次调用返回一个子图和对应的 ax 对象。如下:
fig = plt.figure() # create the canvas for plotting
ax1 = plt.subplot(2, 1, 1)
ax2 = plt.subplot(2, 1, 2)
上面subplot的前两个参数分别指的是总的行数和总的列数。第三个参数表明是第几幅子图(即子图的序号)。