水平分割

  1. names = ['group_a', 'group_b', 'group_c']
  2. values = [1, 10, 100]
  3. plt.figure(figsize=(9, 3))
  4. plt.subplot(131)
  5. plt.bar(names, values)
  6. plt.subplot(132)
  7. plt.scatter(names, values)
  8. plt.subplot(133)
  9. plt.plot(names, values)
  10. plt.suptitle('Categorical Plotting')
  11. plt.show()

plt.figure(figsize=(9, 3)) 生成一个 9*3 的画布, 通过 subplot 可以将画布切分为多个子图, 其中 131 代表 “1行3列的第1个”
📃 Matplotlib子图 - 图1

垂直分割

  1. def f(t):
  2. return np.exp(-t) * np.cos(2*np.pi*t)
  3. t1 = np.arange(0.0, 5.0, 0.1)
  4. t2 = np.arange(0.0, 5.0, 0.02)
  5. plt.figure()
  6. plt.subplot(211)
  7. plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
  8. plt.subplot(212)
  9. plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
  10. plt.show()

其中 211 代表 “2行1列的第1个”

📃 Matplotlib子图 - 图2

创建子图

除了上面的 subplot 切割子图, 还可以通过 subplots 方法预先创建子图, 然后对每个子图填充图像:

  1. data = np.random.randn(2, 100)
  2. fig, axs = plt.subplots(2, 2, figsize=(5, 5))
  3. axs[0, 0].hist(data[0])
  4. axs[1, 0].scatter(data[0], data[1])
  5. axs[0, 1].plot(data[0], data[1])
  6. axs[1, 1].hist2d(data[0], data[1])
  7. plt.show()

📃 Matplotlib子图 - 图3