Python

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 中使用查看帮助文档的智力,能够查看到对所有参数解释说明。

选择几个常用的参数给予说明:

上一篇下一篇

猜你喜欢

热点阅读