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

如何用Seaborn displot实现叠加KDE图(替代已弃用的distplot)

用Seaborn displot实现两列数据的KDE叠加图(替代已弃用的distplot)

问题背景

原先使用distplot可以直接叠加两列数据的KDE曲线,但改用displot后每次调用都会生成独立的图,需要调整代码实现叠加效果。

解决方案

方法1:转换为长格式数据(Seaborn推荐用法)

displot作为Figure级函数,更适配长格式数据。先把宽格式的DataFrame转成长格式,再通过hue参数区分不同数据列:

import pandas as pd
import numpy as np
import seaborn as sns

# 生成示例数据
df1 = pd.DataFrame({
    'num1': np.random.normal(loc=0.0, scale=1.0, size=100),
    'num2': np.random.normal(loc=0.0, scale=1.0, size=100)
})

# 将宽格式转为长格式
df_long = df1.melt(var_name='数据列', value_name='数值')

# 绘制叠加KDE图
sns.displot(
    data=df_long, 
    x='数值', 
    hue='数据列', 
    kind='kde', 
    palette=['orange', 'blue']
)

方法2:使用Axes级函数kdeplot叠加绘制

如果想保留宽格式数据,可以直接用Axes级的kdeplot,在同一个Matplotlib画布上多次调用实现叠加:

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

df1 = pd.DataFrame({
    'num1': np.random.normal(loc=0.0, scale=1.0, size=100),
    'num2': np.random.normal(loc=0.0, scale=1.0, size=100)
})

# 创建画布
plt.figure()
# 叠加绘制两条KDE曲线
sns.kdeplot(data=df1['num1'], color='orange', label='num1')
sns.kdeplot(data=df1['num2'], color='blue', label='num2')
# 添加图例
plt.legend()
plt.show()

说明

  • 方法1是Seaborn官方推荐的方式,长格式数据能让displot自动处理图例、配色等细节,后续新增数据列时扩展性更强。
  • 方法2更贴近原distplot的使用逻辑,直接在同一轴上叠加绘制,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:36:17