如何在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
相关产品推荐
相关产品推荐

