如何在Gridspec嵌套子图中配置不同数据集?
嵌套子图加载不同数据集的解决方案
你当前代码的核心问题是所有子图都调用ax.plot(df),导致显示同一组数据。要给每个子图分配不同数据集,只需先准备对应数量的数据集,再通过循环索引匹配到每个子图即可。
修正后的完整代码
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np # 准备16组模拟数据集(对应2×2外层子图,每个外层含4个内层子图) # 替换成你自己的真实数据集即可 datasets = [] for _ in range(16): x = np.linspace(0, 10, 100) y = np.random.randn(100).cumsum() datasets.append((x, y)) fig = plt.figure(figsize=(10, 8)) outer = gridspec.GridSpec(2, 2, wspace=0.1, hspace=0.1) for i in range(4): inner = gridspec.GridSpecFromSubplotSpec(4, 1, subplot_spec=outer[i], wspace=0.1, hspace=0.1) for j in range(4): # 计算当前子图对应的数据集索引 data_idx = i * 4 + j x_data, y_data = datasets[data_idx] ax = plt.Subplot(fig, inner[j]) ax.plot(x_data, y_data) # 加载对应数据集 # 修正原代码中未定义的`t.set_ha`,这里示例设置子图标题 ax.set_title(f"Subplot {i+1}-{j+1}", ha='center') ax.set_xticks([]) ax.set_yticks([]) fig.add_subplot(ax) plt.show()
关键细节说明
- 数据集匹配:通过
i*4 + j计算每个子图的唯一索引,确保每个子图对应一组独立数据。如果你的数据集是按外层子图分组的,可以用二维列表存储,直接通过datasets[i][j]获取数据。 - 修正原代码错误:原代码中
t.set_ha('center')里的t未定义,这里替换为设置子图标题并居中,你可以根据需求调整为其他文本元素。 - 数据集替换:把模拟的
datasets换成你自己的数据集集合即可,比如存储不同的DataFrame列、单独的DataFrame对象,或者numpy数组。
内容的提问来源于stack exchange,提问作者user20050294
相关产品推荐
相关产品推荐

