Python 数据可视化:如何分区和绘图
2020-11-26 本文已影响0人
you的日常
在图纸上绘图,有时候整张图纸只绘制一幅图,有时候要绘制多幅图。在 Matplotlib 中要实现这种功能,可以使用 plt.subplots,前面已经用过此函数,此处要深入理解它的特点。
首先,要引用 Matplotlib 的模块。
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
1.3.1 分区
在前面编写可视化代码的时候,plt.subplots() 已经出现过了,它返回了一个图像对象和一个坐标系对象。但是,在以往调用的时候,没有向函数提供任何参数。如果像下面代码这样,就不会只返回一个坐标系对象了。
fig, ax = plt.subplots(3, 3, sharex='col', sharey='row')
输出结果:
image从输出结果中可知,现在得到了 3 × 3 = 9 个坐标,即在一张图中得到了 9 个坐标系。
ax
#Out:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x118bb3470>,
<matplotlib.axes._subplots.AxesSubplot object at 0x118ba69b0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11ac36e48>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x11ac652b0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11ac8c6d8>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11acb49b0>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x11acdcc88>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11ad0c0b8>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11ad333c8>]],
dtype=object)
变量 ax 其实引用了一个数组对象,其形状是 3 × 3 的,每个元素是一个坐标系对象。于是乎就可以通过类似 ax[1, 2] 的方式得到某一个坐标系对象,然后对该坐标系对象实施有关操作,比如设置属性,或者调用方法,在上一课中有一个绘制脸谱的例子,就是这个道理的具体应用。
作为复习,可以看下面的代码,目的是依次在每个坐标系内标注上行列。
fig, ax = plt.subplots(3, 3, sharex='col', sharey='row')
for i in range(3):
for j in range(3):
ax[i, j].text(0.5, 0.5, str((i, j)), fontsize=18, ha='center')
输出结果:
image显然,以上功能的实现,就在于 plt.subplots 函数。为了深入理解此函数,可以先浏览它的完整参数。
plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
结合之前展示的 Matplotlib 中函数(方法)的参数,会发现不仅参数个数比较多,而且还通过 *fig_kw、arg 等方式,许可传入更多的参数。这就说明,它们提供了非常灵活的功能。但是,记忆就麻烦了。而实际上,不用刻意记忆,因为通过官方文档或者在 Jupyter 中使用查看帮助文档的智力,能够查看到对所有参数解释说明。
选择几个常用的参数给予说明:
- nrows 和 ncols,必须是整数,分别设置了行(nrows)和列(ncols)的坐标系分区数量;
- sharex 和 shapey,布尔值,或者选择 'none'、'all'、'row'、'col' 中的某个字符串,默认是 False。