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

如何从seaborn的kdeplot获取y值,让垂直线精准触达密度曲线?

问题分析与解决

你遇到的问题核心是**plt.axvline的ymax参数是相对坐标轴的比例值(范围0-1),而非密度曲线的实际y值**。直接用插值得到的f(密度曲线的实际y值)作为ymax,会因为该值远小于1,导致垂直线只画到坐标轴比例对应的位置,而不是曲线的实际高度。

另外你的代码里重复调用了sns.kdeplot(a),这会在图上绘制两条重叠的密度曲线,属于冗余操作。

修正后的代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(1)
a = np.random.normal(size=1000)

# 只调用一次kdeplot,保存绘图轴对象
ax = sns.kdeplot(a)
x, y = ax.get_lines()[0].get_data()

# 插值得到x=1对应的密度值f
f = np.interp(1, x, y)

# 获取当前y轴的上限,将f转换为相对比例
y_max_ax = ax.get_ylim()[1]
ymax_ratio = f / y_max_ax

# 绘制垂直线,使用相对比例作为ymax
plt.axvline(x=1, ymax=ymax_ratio, color='r')

plt.show()

关键说明

  • 避免重复调用sns.kdeplot:第一次调用时把返回的轴对象存为ax,后续直接用这个对象获取数据,不会重复绘图。
  • 转换y值为相对比例:ax.get_ylim()[1]获取当前y轴的最大值,用实际密度值f除以这个最大值,得到相对于坐标轴的比例,这样axvline就能精准延伸到曲线对应的位置。

内容的提问来源于stack exchange,提问作者Oalvinegro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:14