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

如何使用for循环在matplotlib子图中单独绘制各月度Gap列的直方图

错误原因

你的代码嵌套逻辑存在问题:外层每读取1个月度文件,内层就遍历全部4×3=12个子图,把当前月份的Gap直方图绘制到所有子图上,7个文件遍历完成后,每个子图自然叠加了7个直方图。

修正代码

# 提前导入依赖库
import pandas as pd
import glob
import matplotlib.pyplot as plt
import os

pato = r'D:\Inves\Pdoc\Cata_2021'
file_list = glob.glob(pato + r"\*.xls")
print('file_list {}'.format(file_list))

# 生成子图并将二维数组展平为一维,方便按索引调用
fig, axs = plt.subplots(4,3, figsize=(15, 12), sharex=True, sharey=True)
axs = axs.flatten()

# 遍历文件,每个文件仅对应一个子图绘制
for idx, proce in enumerate(file_list):
    df_cat = pd.read_excel(proce)
    df_cat_sha = df_cat[df_cat.Prof.between(0, 75)]
    # 仅在对应索引的子图上绘制当前月份的直方图
    df_cat_sha.Gap.hist(bins=18, ax=axs[idx], color='green', alpha=0.75)
    # 可选:给子图加标题区分月份,此处取文件名作为标题
    axs[idx].set_title(os.path.basename(proce))

# 隐藏多余的空自图(4×3=12个,仅使用前7个)
for ax in axs[len(file_list):]:
    ax.axis('off')

plt.tight_layout() # 自动调整子图间距避免遮挡
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:03