首页 > 解决方案 > 相当于 sns.distplot(data, fit=scipy.stats.norm) 与 plotly

问题描述

一段时间以来,我一直在使用seabornplotly进行可视化,这取决于我目前的需要。最近,我一直在尝试完全迁移到plotly,但有些事情我仍然不知道如何使它工作。

例如,我曾经使用 seaborn 来检查一些数据的分布,看看它与高斯分布的拟合程度。这可以通过以下代码段轻松完成:

import seaborn as sns
from scipy.stats import norm

sns.distplot(data, fit=norm)

我一直在尝试用plotly expresspx.histogram更具体地说)实现一些类似的快速高斯检查,但我无法完成。你能帮我解决这个问题吗?

编辑

“数据”的一个例子是:

import numpy as np
np.random.seed(123)

data = np.random.noncentral_chisquare(3, 20, 1000)

输出应显示带有 KDE 的数据直方图,以及高斯等效 KDE。这在测试转换结果(log、box-cox...)时很有帮助

标签: pythonplotlyseabornplotly-pythonplotly-express

解决方案


我想你可能有兴趣阅读这篇文章。显然,目前它使用的是最简单的方法,plotly.figure_factory.create_dist_plot但从上面的链接来看,它似乎将被停止使用。

import numpy as np
import plotly.figure_factory as ff

np.random.seed(123)
data = np.random.noncentral_chisquare(3, 20, 1000)

m = data.mean()
s = data.std()
gaussian_data = np.random.normal(m, s, 10000)

fig = ff.create_distplot(
    [data, gaussian_data],
    group_labels=["plot", "gaussian"],
    curve_type="kde")

fig.data = [fig.data[0], fig.data[2], fig.data[3]]

fig.update_layout(showlegend=False)
fig.show()

在此处输入图像描述

如果不是fig.data = ...你使用

lst = list(fig.data)
lst.pop(1)
fig.data = tuple(lst)

你会得到 在此处输入图像描述


推荐阅读