如何用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
相关产品推荐
相关产品推荐

