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

如何在Matplotlib双轴图中单独限制单个轴的显示范围

问题描述

我使用以下代码生成了双轴图表:

fig, ax1 = plt.subplots(figsize=(20, 10))

pds, ns, ss, avgs = polar
ax1.plot(pds, avgs, color="purple", linestyle="-")
ax1.tick_params(axis='y', labelcolor="k")
ax1.set_ylabel("polar field strength")

ax2 = ax1.twinx()

for i, (cmd, ffmd, md, c) in enumerate(zip(cmds, ffmds, mds, cycles)):
    p = ax2.plot(c[0], c[1], label="SC" + str(25 - len(cycles) + i + 1))
    color = p[-1].get_color()
    ax2.axvline(x=cmd, color=color, linestyle=":")
    ax2.axvline(x=md, color=color, linestyle = '--')
    ax2.axvline(x=ffmd, color=color, linestyle = '-')

sc25 = cycles[-1]
p = ax2.plot(sc25[0][:-6], sc25[1][:-6], label="SC25")
color = p[-1].get_color()
ax2.axvline(x=cmds[-1], color=color, linestyle=":")
ax2.tick_params(axis='y', labelcolor="k")
ax2.set_ylabel("SSN")

该代码已成功生成目标图表:
图表展示

但我希望将ax1对应的紫色polar field strength曲线的显示范围限制在当前轴的-100到-50区间,避免图表不必要的杂乱,请问有什么实现方法?


解决方法

方法一:直接固定ax1的y轴显示范围

如果只是想让ax1的y轴仅展示-100到-50的区间,超出该范围的曲线会被轴自动截断,只需在ax1的配置代码后添加一行设置y轴范围的代码:

ax1.set_ylim(-100, -50)

将这行代码放在ax1.set_ylabel("polar field strength")之后即可,这样紫色曲线超出该区间的部分会被隐藏,不会在图表中显示。

方法二:提前过滤数据,仅绘制符合范围的曲线段

如果需要曲线只保留-100到-50之间的部分(轴范围可按需设置),可以先对数据进行掩码过滤,再绘制曲线:

import numpy as np

# 将数据转换为numpy数组(若原本不是数组格式)
pds_np = np.array(pds)
avgs_np = np.array(avgs)

# 筛选出avgs在-100到-50之间的数据索引
mask = (avgs_np >= -100) & (avgs_np <= -50)
filtered_pds = pds_np[mask]
filtered_avgs = avgs_np[mask]

# 使用过滤后的数据绘制曲线
ax1.plot(filtered_pds, filtered_avgs, color="purple", linestyle="-")

这种方式会只绘制符合范围的曲线部分,若需要同步固定轴范围,可再添加ax1.set_ylim(-100, -50)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:39:57