首页 > 解决方案 > 你能在 matplotlib 中创建非均匀的可迭代图吗

问题描述

我正在尝试创建一个带有许多非均匀子图的图形。我希望能够使用可迭代索引创建图,这样我就不必单独创建每个图。

我可以使用 fig, ax = plt.subplots(5) 创建一系列统一的子图,其中我可以使用 ax[i] 绘制到各个轴。

fig, ax = plt.subplots(5)

展望未来,我可以使用 ax[i] 使用 ax[0].plt 等绘制每个图。

但是,我希望能够创建一系列如下所示的图:

gridsize = (10,3)
fig = plt.figure(figsize=(5,3))
ax0 = plt.subplot2grid(gridsize, (0, 0), colspan=3, rowspan=1)

for i in range(1,5):
    ax1 = plt.subplot2grid(gridsize, (i, 0), colspan=2, rowspan=1)
    ax2 = plt.subplot2grid(gridsize, (i, 2), colspan=2, rowspan=1)

我可以使用上面的 ax[i] 调用每个图。

有没有人有任何想法?谢谢。

标签: pythonmatplotlibgridsubplot

解决方案


您可以将轴附加到列表中,从该列表中索引相应的项目或对其进行迭代。

import numpy as np
import matplotlib.pyplot as plt

gridsize = (10,3)
fig = plt.figure(figsize=(5,3))
ax0 = plt.subplot2grid(gridsize, (0, 0), colspan=3, rowspan=1)

ax = [ax0]

for i in range(1,5):
    ax.append(plt.subplot2grid(gridsize, (i, 0), colspan=2, rowspan=1))
    ax.append(plt.subplot2grid(gridsize, (i, 2), colspan=2, rowspan=1))

## Now plot to those axes:

for i in range(2*4+1):
    ax[i].plot(np.arange(14),np.random.randn(14))

for axi in ax:
    axi.plot(np.arange(14),np.random.randn(14))


plt.show()

推荐阅读