You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib嵌套循环绘制3×3子图时内容重复如何解决

问题原因

你的代码存在循环逻辑错误:

  • 总共只有3个国家×3个指标=9组需要绘制的内容,对应9张子图,但你写了三层循环:最内层循环会遍历全部9个ax子图对象
  • 每一组「国家+指标」的数据,都会被重复画到所有9张子图上,同时覆盖之前画的内容和子图标题
  • 三层循环全部执行完后,所有子图都保留的是最后一组(最后一个国家+最后一个指标)的绘图结果,因此9张子图内容完全一致。
修正方案

去掉多余的内层遍历子图的循环,将「国家+指标」的组合和展平后的子图按顺序一一对应,保证每个子图只绘制一次对应内容即可。
修正后的可运行代码:

fig, axes = plt.subplots(3, 3, figsize=(15, 15))
flat_axes = axes.ravel()  # 将3*3的二维子图数组展平为长度9的一维数组
countries = df.Country.unique()
metrics = ["pre", "hum", "temp"]

ax_index = 0
for country in countries:
    for metric in metrics:
        # 按索引取当前组合对应的唯一子图
        current_ax = flat_axes[ax_index]
        # 聚合对应数据
        plot_data = df[
            (df.Country == country) & (df.year == 2016)
        ].groupby("date")[metric].mean().reset_index().sort_values("date")
        # 绘图
        plot_data.plot(
            ax=current_ax,
            kind="line",
            x="date",
            y=metric,
            xlabel=""
        )
        current_ax.set_title(f"{metric} for {country}", size=10)
        ax_index += 1

plt.tight_layout()  # 自动调整子图间距,避免标题、坐标轴标签重叠
plt.show()

补充说明:上述代码的遍历顺序正好匹配常规布局逻辑:每行对应一个国家、每列对应一个指标,最终输出的3行3列子图完全符合需求。

内容的提问来源于stack exchange,提问作者beridzeg45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:36:16