gpt4 book ai didi

python - 如何在seaborn displot上绘制正态曲线

转载 作者:行者123 更新时间:2023-12-04 13:06:41 29 4
gpt4 key购买 nike

distplot 已被弃用,取而代之的是 displot。

之前的函数有绘制正态曲线的选项。

import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

ax = sns.distplot(df.extracted, bins=40, kde=False, fit=stats.norm)

fit=stats.norm 不再适用于 displot。在这个 question 的答案中,我后来看到了绘制法线的方法,但是它是在一些平均为 0 左右的随机数据上完成的。

最佳答案

单面

  • .map可以用
import pandas as pd
import seaborn as sns
import numpy as np
import scipy

# data
np.random.seed(365)
x1 = np.random.normal(10, 3.4, size=1000) # mean of 10
df = pd.DataFrame({'x1': x1})

# display(df.head(3))
x1
0 10.570932
1 11.779918
2 12.779077

# function for mapping the pdf
def map_pdf(x, **kwargs):
mu, std = scipy.stats.norm.fit(x)
x0, x1 = p1.axes[0][0].get_xlim() # axes for p1 is required to determine x_pdf
x_pdf = np.linspace(x0, x1, 100)
y_pdf = scipy.stats.norm.pdf(x_pdf, mu, std)
plt.plot(x_pdf, y_pdf, c='r')


p1 = sns.displot(data=df, x='x1', kind='hist', bins=40, stat='density')
p1.map(map_pdf, 'x1')

enter image description here

单面或多面

  • 更容易遍历每个轴并添加 pdf
# data
np.random.seed(365)
x1 = np.random.normal(10, 3.4, size=1000) # mean of 10
x2 = np.random.standard_normal(1000) # mean of 0
df = pd.DataFrame({'x1': x1, 'x2': x2}).melt() # create long dataframe

# display(df.head(3))
variable value
0 x1 10.570932
1 x1 11.779918
2 x1 12.779077

p1 = sns.displot(data=df, x='value', col='variable', kind='hist', bins=40, stat='density', common_bins=False,
common_norm=False, facet_kws={'sharey': True, 'sharex': False})

# extract and flatten the axes from the figure
axes = p1.axes.ravel()

# iterate through each axes
for ax in axes:
# extract the variable name
var = ax.get_title().split(' = ')[1]

# select the data for the variable
data = df[df.variable.eq(var)]

mu, std = scipy.stats.norm.fit(data['value'])
x0, x1 = ax.get_xlim()
x_pdf = np.linspace(x0, x1, 100)
y_pdf = scipy.stats.norm.pdf(x_pdf, mu, std)
ax.plot(x_pdf, y_pdf, c='r')

enter image description here

关于python - 如何在seaborn displot上绘制正态曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69059121/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com