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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:21:08