0Pricing
Python Academy · 课时

子图与布局

组合多个图表

子图与布局 是 CoddyKit 上的免费 Python Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

为什么需要多个图表

一个图表通常并不足够。您可能希望并排比较多个视图,或将信息密集的图表拆分成较小的面板。Matplotlib 将这种做法称为在一个图形中排列多个坐标区。

主要工具是 plt.subplots(rows, cols)。

坐标区网格

fig, axes = plt.subplots(2, 3) 会创建一个 2 行 3 列的图形网格,共有六个坐标区。axes 结果是一个二维数组,可以像 axes[0][1] 一样进行索引。

面板总数就是行数乘以列数。

rows, cols = 2, 3
total = rows * cols
print('Grid', rows, 'x', cols, '=', total, 'axes')
for r in range(rows):
    for c in range(cols):
        print('panel at', (r, c))

为坐标区数组建立索引

只有一行时,axes 是一维的:请使用 axes[0]、axes[1]。使用完整网格时,它是二维的:axes[row][col]。

只有一个子图时,完全不需要建立索引。

遍历面板

一种简洁的写法是先将网格展平,然后循环遍历,并将每个坐标区与其数据配对。这样可以避免为每个面板重复编写几乎相同的代码。

datasets = ['A', 'B', 'C', 'D']
# imagine axes flattened to a list of 4
for i, name in enumerate(datasets):
    print('Plot dataset', name, 'on flat axes index', i)

共享坐标区

当多个面板共享同一个刻度范围时,请传入 sharex=True 或 sharey=True。这样,子图会使用同一个公共范围,使比较更加公平,并去除多余的刻度标签。

这非常适合堆叠的时间序列。

网格图形的大小

网格比单个图表需要更多空间。调用子图函数时,请使用以英寸为单位的 figsize=(width, height) 设置大小。一个经验法则是根据列数和行数调整尺寸。

cols, rows = 3, 2
per_panel_w, per_panel_h = 3, 2.5
print('Suggested figsize:', (cols * per_panel_w, rows * per_panel_h))

面板之间的间距

面板可能会彼此挤在一起。fig.tight_layout() 可以自动解决大多数情况。如需更精细的控制,请使用 fig.subplots_adjust(wspace=0.4, hspace=0.4) 设置水平和垂直间距。

数值越大,子图之间的空间就越大。

使用 GridSpec 创建不规则布局

并非所有布局都是规则网格。GridSpec 可以让一个坐标区跨越多行或多列,例如在顶部放置一个宽图,在底部放置两个小图。

您可以先定义网格,然后像对数组进行切片一样放置每个坐标区。

规划跨越范围

请将 GridSpec 切片想象成范围。跨越所有列的顶部图表是 gs[0, :];左下方图表是 gs[1, 0]。先在纸上规划切片,可以避免混淆。

layout = {
    'header': '[0, :]   (full width)',
    'left':   '[1, 0]   (bottom left)',
    'right':  '[1, 1]   (bottom right)',
}
for name, slot in layout.items():
    print(name.ljust(7), slot)

一图一故事

多面板图形仍然应该讲述一个连贯的故事。请使用共享的 fig.suptitle()、一致的颜色和共享的刻度范围,让各个面板作为一个整体呈现,而不是像随意拼贴的图片。

按面板自定义

由于每个单元格都是独立的坐标区,您可以分别自定义它们。axes[0][0].set_title('Sales') 只会为左上方面板设置标题,而 axes[1][1].set_ylabel('Cost') 只会为右下方面板添加标签。

正是这种独立性,让面向对象风格在网格布局中展现出优势。

快速检查

检验您对多面板布局的掌握程度。

回顾

现在您可以组合多个图表:

  • plt.subplots(rows, cols) 创建坐标区网格
  • 使用 axes[row][col] 建立索引,或将网格展平后循环遍历
  • sharex/sharey 对齐刻度范围;figsize 设置网格大小
  • tight_layout 和 subplots_adjust 管理间距
  • GridSpec 支持跨越多个单元格的面板

常见问题解答

「子图与布局」课时是免费的吗?

是的 — 「子图与布局」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「子图与布局」这节课中我会学到什么?

组合多个图表 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「子图与布局」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 图形与坐标轴
  2. 折线图、柱状图与散点图
  3. 自定义图表
  4. 子图与布局
← 返回 Python Academy