如何设置matplotlib的plt.axhline()让水平线在指定x轴值停止
plt.axhline()按实际x坐标设置终止位置的解决方法
plt.axhline()的xmin、xmax参数默认接收的是x轴范围的归一化比例值,取值区间为[0,1]:0对应x轴最左端点,1对应x轴最右端点,不能直接传入实际的x坐标数值。
针对你的示例场景的修改方案
你的代码中x轴的取值范围是-60~+60:
- 如果要让水平线从x轴最左侧画到x=5的位置终止,先计算归一化后的xmax值:
(5 - (-60))/(60 - (-60)) ≈ 0.542 - 如果要让水平线仅在x绝对值≤5的区间显示(即左右两端分别在x=-5和x=5的位置),还需要额外计算归一化xmin值:
(-5 - (-60))/(60 - (-60)) ≈ 0.458
修改后的代码如下:
import numpy as np import matplotlib.pyplot as plt plt.figure() plt.plot(np.arange(-60, 60, 20), np.arange(0, 1.2, 0.2)) # 获取当前x轴的左右边界值,适配动态x轴场景 x_left, x_right = plt.xlim() # 计算x=5对应的归一化xmax xmax_norm = (5 - x_left) / (x_right - x_left) # 仅画到x=5的写法 plt.axhline(y = 0.5, xmax = xmax_norm, c= 'r') # 如果要画在-5~+5区间,替换成下面这句即可 # xmin_norm = (-5 - x_left) / (x_right - x_left) # plt.axhline(y = 0.5, xmin = xmin_norm, xmax = xmax_norm, c= 'r') plt.show()
更简单的替代方案
如果你不想手动计算归一化比例,可以直接使用plt.hlines()函数,该函数的xmin、xmax参数直接接收实际x坐标数值,不用做转换:
# 直接绘制x从-5到5、y=0.5的水平线 plt.hlines(y=0.5, xmin=-5, xmax=5, color='r')
内容的提问来源于stack exchange,提问作者JonnDough
相关产品推荐
相关产品推荐

