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

如何用Plotly的px.histogram绘制包含KDE曲线的直方图(替代已弃用的ff.create_distplot)

如何用Plotly的px.histogram绘制包含KDE曲线的直方图(替代已弃用的ff.create_distplot)

嗨,我来帮你搞定这个问题!你遇到的情况很常见——ff.create_distplot被弃用后,用px.histogram默认确实不会自动生成KDE曲线,因为它的核心功能是绘制直方图,KDE属于额外的统计曲线,需要我们手动添加到图中。下面给你一个完美的解决方案,完全符合Plotly官方推荐的用法:

步骤1:导入所需库并获取数据

首先我们需要导入Plotly的相关库,以及用来计算KDE的scipy.stats和数值计算的numpy:

import plotly.express as px
import plotly.graph_objects as go
from scipy.stats import gaussian_kde
import numpy as np

# 获取示例数据
data = px.data.tips()["tip"]

步骤2:创建带rug边际的直方图

用px.histogram生成基础直方图,这里有个关键参数histnorm="probability density",它能让直方图的y轴和KDE曲线的概率密度尺度对齐,确保两者在同一坐标系下显示:

fig = px.histogram(
    x=data,
    marginal="rug",
    nbins=20,  # 可以根据需求调整直方图的分箱数量,和原distplot效果匹配
    histnorm="probability density",
    opacity=0.7,  # 设置直方图透明度,方便看清叠加的KDE曲线
)

步骤3:计算并添加KDE曲线

用scipy的gaussian_kde计算数据的核密度估计,然后用go.Scatter把曲线添加到直方图上:

# 生成KDE曲线的x轴采样点
x_values = np.linspace(data.min(), data.max(), 1000)
# 计算对应x点的KDE密度值
kde = gaussian_kde(data)
y_values = kde(x_values)

# 添加KDE曲线到图中
fig.add_trace(go.Scatter(
    x=x_values,
    y=y_values,
    mode="lines",
    name="KDE",
    line=dict(color="#ff4b4b", width=2)  # 自定义曲线颜色和宽度
))

步骤4:优化图表布局

最后可以调整一下图表的标题、轴标签等,让它更清晰:

fig.update_layout(
    title="小费金额分布(带直方图、Rug图和KDE曲线)",
    xaxis_title="小费金额",
    yaxis_title="概率密度",
    legend_title="统计项"
)

# 显示图表
fig.show()

这样生成的图表就和你之前用ff.create_distplot得到的效果完全一致了——既有直方图、rug边际,也有KDE拟合曲线,而且完全基于官方推荐的px.histogram工具,不用担心弃用问题。

补充说明

如果你只是临时需要快速替代ff.create_distplot,虽然官方不推荐,但目前还是可以继续使用它(不过未来版本可能会移除):

import plotly.figure_factory as ff
import plotly.express as px

data = px.data.tips()["tip"]
ff.create_distplot([data], group_labels=["Tip"])

但更建议用前面的方法,因为它更灵活,也符合Plotly的未来发展方向。

备注:内容来源于stack exchange,提问作者Richie Bendall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:08:08