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

如何为matplotlib的2x2子图网格设置统一固定的y轴取值范围

问题原因

你之前的设置没有生效,核心原因是plt.ylim()是pyplot的全局方法,仅会修改当前处于激活状态的子图,循环遍历ax对象时调用plt.ylim()不会自动绑定到当前遍历的子图实例上,因此只有最后一个激活的子图会被修改,其余子图无变化。

解决方案

方案1:创建子图时直接共享Y轴(最简便)

在初始化子图时添加sharey=True参数,所有子图会自动使用统一的Y轴范围,如果你需要和第一个子图范围对齐,也可以配合手动获取第一个子图范围的逻辑使用:

# 初始化时直接开启Y轴共享,所有子图Y轴自动同步
fig, axs = plt.subplots(2, 2, sharey=True)

# 后续绘图代码保持不变即可
axs[0, 0].plot(x, y)
axs[0, 0].set_title("Non Faulty Acc X Data")
axs[0, 1].plot(x2, y2, 'tab:orange')
axs[0, 1].set_title('Non Faulty Acc X Data')
axs[1, 0].plot(x3, y3, 'tab:green')
axs[1, 0].set_title('Faulty Acc X Data')
axs[1, 1].plot(x4, y4, 'tab:red')
axs[1, 1].set_title('Faulty Acc X Data')

方案2:手动遍历子图设置Y轴范围

如果你需要明确指定所有子图和第一个子图的Y轴范围完全对齐,可以先获取第一个子图的Y轴上下限,再调用每个子图实例的set_ylim()方法设置:

# 先获取第一个子图的Y轴范围
ymin, ymax = axs[0, 0].get_ylim()

# 遍历所有子图,单独设置每个子图的Y轴范围
for ax in axs.flat:
    ax.set_ylim(ymin, ymax)
    ax.set(ylabel='Time')

如果你不需要和第一个子图对齐,而是要固定Y轴为0到1,直接把set_ylim的参数改为0,1即可:

ax.set_ylim(0, 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:39:01