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

如何使Seaborn KDEPlot不同色调的密度峰值高度一致?

调整Seaborn JointGrid边际KDE曲线峰值高度的方法

直接设置ymax只会截断坐标轴显示范围,不会改变KDE曲线本身的峰值高度,达不到你要的效果。推荐用以下两种方法实现:

方法一:手动缩放KDE曲线的y值

KDE曲线的密度值是归一化后的结果,你可以提取两条曲线的数值,计算峰值比例后缩放目标曲线的y轴数据,让两者峰值对齐。示例代码如下:

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

# 生成示例数据
np.random.seed(42)
x_blue = np.random.normal(0, 1, 1000)
x_red = np.random.normal(0, 2, 1000)
y_data = np.random.normal(0, 1, 1000)

# 创建JointGrid并绘制基础图形
g = sns.JointGrid(x=x_blue, y=y_data)
g.plot_joint(sns.scatterplot, alpha=0.3)
g.plot_marginals(sns.kdeplot, color='blue')
# 绘制红色边际KDE
sns.kdeplot(x=x_red, ax=g.ax_marg_x, color='red')

# 获取边际轴上的两条KDE曲线对象
lines = g.ax_marg_x.get_lines()
blue_kde = lines[0]
red_kde = lines[1]

# 计算两条曲线的峰值
blue_peak = max(blue_kde.get_ydata())
red_peak = max(red_kde.get_ydata())

# 计算缩放比例,让红色曲线峰值匹配蓝色
scale_ratio = blue_peak / red_peak

# 更新红色曲线的y值
red_kde.set_ydata(red_kde.get_ydata() * scale_ratio)

# 调整边际轴的y范围以适配缩放后的曲线
g.ax_marg_x.set_ylim(0, max(blue_peak, red_kde.get_ydata().max()))

plt.show()

方法二:调整KDE带宽(可选)

如果你想通过改变KDE的平滑程度来让峰值高度接近,可以调整bw_method参数(比如减小红色KDE的带宽,让曲线更陡峭、峰值更高)。但这种方法会改变曲线的形状,适合需要同时调整分布形态的场景:

# 在绘制红色KDE时调整带宽
sns.kdeplot(x=x_red, ax=g.ax_marg_x, color='red', bw_method=0.3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:21