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

Python中用for循环绘制多子图出现挤压问题求助

解决Matplotlib子图挤压重叠问题

你的问题核心是子图高度分配不足,17个子图挤在仅10单位高度的画布上,导致所有图表重叠挤压。另外代码里还有个小问题:set_title(key)中的key未定义,应该替换为当前循环的contract。

修复后的代码:

import matplotlib.pyplot as plt

# 根据子图数量调整画布高度,给每个子图足够垂直空间
fig, ax = plt.subplots(nrows=len(Opts_Data_All), figsize=(20, 6*len(Opts_Data_All)))

for index, contract in enumerate(Opts_Data_All):
    ax[index].set_xlabel('行权价')
    ax[index].set_ylabel('隐含波动率')
    ax[index].set_title(f'合约:{contract}')
    # 若数据包含Strike列,建议将x轴设为行权价,图表更具可读性
    ax[index].plot(Opts_Data_All[contract]['Strike'], Opts_Data_All[contract]['IV']) 

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

关键调整点:

  • 画布高度适配:将figsize的高度设为6*len(Opts_Data_All),每个子图分配6单位高度,17个子图总高度为102,足够清晰展示内容。
  • 修复标题变量:用contract替代未定义的key,让每个子图标题对应当前合约名称。
  • 添加tight_layout:自动优化子图间距和标签位置,避免文字重叠。
  • 优化x轴数据:如果数据中包含Strike(行权价)列,将其设为x轴,比默认索引更有业务意义。

若需要更灵活的间距控制,可替换tight_layout为手动调整:

plt.subplots_adjust(hspace=0.5)  # 调整子图垂直间距,0.5为相对值,可按需修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:52:12