如何在Matplotlib中限制负数区域内竖线的显示范围
问题修正方案
问题原因
plt.axvline的ymax参数接收的是归一化坐标值(范围0到1,0对应y轴底部,1对应y轴顶部),不是实际的y数值。你直接传入曲线的实际y值(负数),因为远小于0,所以只会显示极短的一段。
解决方案1:转换为归一化坐标
先获取当前坐标轴的y轴范围,将目标y值转换为0-1之间的归一化比例,再传入ymax:
import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = np.linspace(0.01,.99,99) y = 5837.23*x - 19500 plt.plot(x, y) ax = plt.gca() # 获取当前坐标轴对象 y_min, y_max = ax.get_ylim() # 获取y轴的上下限 # 计算x=0.52对应的y值和归一化比例 y_052 = 5837.23*0.52 - 19500 ymax_052 = (y_052 - y_min)/(y_max - y_min) plt.axvline(x=0.52, ymax=ymax_052) # 计算x=0.75对应的y值和归一化比例 y_075 = 5837.23*0.75 - 19500 ymax_075 = (y_075 - y_min)/(y_max - y_min) plt.axvline(x=0.75, ymax=ymax_075) plt.show()
解决方案2:直接绘制竖线(更直观)
用plt.plot直接绘制从y轴底部到曲线对应点的竖线,无需处理归一化:
import numpy as np import matplotlib.pyplot as plt %matplotlib inline x = np.linspace(0.01,.99,99) y = 5837.23*x - 19500 plt.plot(x, y) ax = plt.gca() y_min = ax.get_ylim()[0] # 获取y轴底部值 # 绘制x=0.52处的竖线 y_052 = 5837.23*0.52 - 19500 plt.plot([0.52, 0.52], [y_min, y_052], color='C0') # 颜色可自行调整 # 绘制x=0.75处的竖线 y_075 = 5837.23*0.75 - 19500 plt.plot([0.75, 0.75], [y_min, y_075], color='C0') plt.show()
两种方法都能实现竖线从y轴底部延伸到曲线上对应点的效果,第二种方法逻辑更直接,无需计算归一化比例。
内容的提问来源于stack exchange,提问作者Lihime
相关产品推荐
相关产品推荐

