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

如何在Seaborn配对图(pairplot)中将正态分布改为均匀分布

如何将Seaborn Pairplot的正态分布改为均匀分布

要把pairplot对角线上默认的正态分布拟合曲线换成均匀分布,你可以通过自定义对角元素的绘图逻辑来实现,下面是两种实用的方法:

方法1:自定义对角绘图函数(拟合均匀分布)

Seaborn的pairplot允许先指定对角为直方图,再手动叠加均匀分布的拟合曲线。这里需要用到scipy.stats.uniform来生成均匀分布的概率密度函数。

修改后的完整代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from io import StringIO
from scipy.stats import uniform

# 构建示例数据
text = '''id,revenue ,profit,Label
101,779183,281257,1
102,144829,838451,1
103,766465,757565,-1'''
df = pd.read_csv(StringIO(text))
df = df[df.columns[1::]]

# 绘制pairplot,先指定对角为直方图
sns_plot = sns.pairplot(df, hue='Label', diag_kind='hist')

# 遍历每个对角轴,添加均匀分布拟合曲线
for ax in sns_plot.diag_axes:
    # 获取当前轴的原始数据
    data = ax.collections[0].get_offsets()[:, 0]
    # 拟合均匀分布,得到参数:loc是最小值,scale是数据范围(max-min)
    loc, scale = uniform.fit(data)
    # 生成x轴取值范围
    x = np.linspace(data.min(), data.max(), 100)
    # 计算均匀分布的概率密度
    pdf = uniform.pdf(x, loc=loc, scale=scale)
    # 缩放pdf以匹配直方图的频数高度
    pdf_scaled = pdf * len(data) * (x[1] - x[0])
    # 绘制均匀分布曲线
    ax.plot(x, pdf_scaled, color='red', linestyle='--', label='Uniform Fit')
    ax.legend()

plt.show()

方法2:直接替换默认对角绘图逻辑

如果你想跳过直方图,直接用自定义的均匀分布曲线替代默认的KDE,可以把自定义函数传给pairplot的diag_func参数。

示例代码片段

def plot_uniform_diag(x, **kwargs):
    # 拟合均匀分布参数
    loc, scale = uniform.fit(x)
    x_vals = np.linspace(x.min(), x.max(), 100)
    pdf = uniform.pdf(x_vals, loc=loc, scale=scale)
    # 绘制均匀分布曲线
    sns.lineplot(x=x_vals, y=pdf, **kwargs)
    # 可选:叠加密度直方图
    sns.histplot(x=x, kde=False, stat='density', alpha=0.5, **kwargs)

# 使用自定义函数绘制pairplot
sns_plot = sns.pairplot(df, hue='Label', diag_func=plot_uniform_diag)
plt.show()

关键说明

  • 均匀分布的参数由scipy.stats.uniform.fit()自动计算,无需手动指定范围。
  • 方法1中对pdf的缩放很重要:直方图纵轴是频数,而均匀分布的pdf是概率密度,缩放后才能让曲线和直方图的高度匹配。
  • 如果只需要展示均匀分布曲线,可删除代码中直方图相关的部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:22:54