Jupyter中添加vlines后seaborn.kdeplot曲线无法正常显示问题
问题根因
- 核心错误:代码中
plt.vlines的ymax参数硬编码为1,而KDE曲线的Y轴是概率密度值,针对你提供的数十万量级的数据集,计算出的密度值远小于1,硬设ymax=1会将Y轴范围强行拉伸到0~1区间,KDE曲线会紧贴X轴无法观察到。 - 潜在适配问题:你提到全量数据集跨度接近6个数量级(最小值8e+01、最大值6e+07),线性X轴下极端值会将KDE曲线拉得极扁,也会导致曲线不清晰。
修正方案
直接删除硬编码的ymax=1,改为动态读取KDE绘制后的Y轴上限来设置竖线高度,大跨度数据集可开启对数X轴优化显示,修正后代码如下:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt from scipy.stats import mode plt.figure(figsize=(7,5)) # 绘制KDE并获取轴对象 ax = sns.kdeplot(dataset, shade=True) # 读取当前KDE的Y轴最大值作为竖线的高度上限 y_max = ax.get_ylim()[1] plt.vlines(x=np.mean(dataset), ymin=0, ymax=y_max, color='blue', linestyle='--') plt.vlines(x=np.median(dataset), ymin=0, ymax=y_max, color='brown', linestyle='--') plt.vlines(x=mode(dataset)[0][0], ymin=0, ymax=y_max, color='red', linestyle='--') plt.legend(['Dataset', 'Mean', 'Median', 'Mode'], fontsize=12) # 全量数据集绘图时可取消下方注释开启对数X轴,优化极端值下的显示效果 # plt.xscale('log') plt.show()
效果验证
使用你提供的25条测试数据运行上述代码,可正常渲染KDE曲线,三条集中趋势线高度会自动适配曲线高度,不会出现Y轴拉伸导致的曲线不可见问题。
内容的提问来源于stack exchange,提问作者AngryWeeb
相关产品推荐
相关产品推荐

