如何在Matplotlib中基于右侧Y轴设置水平网格线?
在Matplotlib中基于右侧Y轴绘制水平网格线的方法
默认情况下,ax.grid(axis="y") 绘制的水平网格线是绑定左侧Y轴的。要实现绑定右侧Y轴的水平网格线,有两种实用方法:
方法一:手动绘制网格线
通过获取右侧Y轴的刻度位置,手动绘制对应水平网格线,同时关闭左侧轴的Y网格:
import matplotlib.pyplot as plt import numpy as np # 生成示例数据 x = np.linspace(0, 10, 100) y_left = np.sin(x) y_right = np.exp(x/10) # 创建基础轴和双Y轴 fig, ax_left = plt.subplots() ax_right = ax_left.twinx() # 绘制左右轴数据 ax_left.plot(x, y_left, color='tab:blue') ax_right.plot(x, y_right, color='tab:red') # 配置轴样式 ax_left.set_ylabel('左侧Y轴', color='tab:blue') ax_left.tick_params(axis='y', labelcolor='tab:blue') ax_right.set_ylabel('右侧Y轴', color='tab:red') ax_right.tick_params(axis='y', labelcolor='tab:red') # 关闭左侧轴的Y网格 ax_left.grid(False, axis='y') # 获取右侧Y轴刻度,手动绘制水平网格线 right_yticks = ax_right.get_yticks() for tick in right_yticks: ax_left.axhline(y=tick, color='gray', linestyle='--', alpha=0.7) plt.show()
方法二:利用右侧轴的网格功能
直接开启右侧轴的Y网格,通过调整轴层级避免网格被绘图覆盖:
import matplotlib.pyplot as plt import numpy as np # 生成示例数据 x = np.linspace(0, 10, 100) y_left = np.sin(x) y_right = np.exp(x/10) # 创建基础轴和双Y轴 fig, ax_left = plt.subplots() ax_right = ax_left.twinx() # 绘制左右轴数据 ax_left.plot(x, y_left, color='tab:blue') ax_right.plot(x, y_right, color='tab:red') # 配置轴样式并关闭左侧Y网格 ax_left.set_ylabel('左侧Y轴', color='tab:blue') ax_left.tick_params(axis='y', labelcolor='tab:blue') ax_left.grid(False, axis='y') ax_right.set_ylabel('右侧Y轴', color='tab:red') ax_right.tick_params(axis='y', labelcolor='tab:red') # 开启右侧轴Y网格,调整层级让网格显示在绘图下方 ax_right.grid(True, axis='y', color='gray', linestyle='--', alpha=0.7) ax_right.set_zorder(ax_left.get_zorder() - 1) ax_left.patch.set_visible(False) # 隐藏左侧轴背景,露出网格 plt.show()
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

