如何在海况上画出正态曲线

displot被反对为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)

适合=统计数据。诺姆不再和精神错乱打交道了。在这个问题的答案中,我看到了稍后绘制正常曲线的方法,但它是在平均为0的随机数据上完成的。

# # #seaborn.displot is是数字级的图吗kind parameter specifies the approach.参数指定方法。当kind='hist' the parameters for seaborn.hist的参数seaborn.histplot are available.是可用的。

有关轴水平图,请参见如何在海运直方图上添加标准正常pdf

map需要dataframe列名来将pdf映射到seaborn上。拆解需要在数据帧中的数据。

一个问题是x_pdf is calculated fo为每个axes::

X0 x1 = p1。axes[0][0]。get_xlim()

如果axes are di对于多个方面(sharex=False) then there's not a way to get xlim for each axes with为每一个axes within .map..

引用:

Seaborn的histplot和displot输出不匹配

构建结构化的多小区网格

测试python 3.8.11 panpandas 1.3.2 matplotlib 3.4.2 seaborn 0.11.2

单一的方面

。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')

单个或多个层面

迭代每个轴并添加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')

###如果你想复制相同的情节作为你的distplot I suggest using histplot. Fitting our d我建议使用histplot. Fitting our dat. 将我们的数据与法线相匹配只需要一行代码。

import numpy as np
from scipy import stats
import seaborn as sns
x = np.random.normal(10, 3.4, size=1000)
ax = sns.histplot(x, bins=40, stat='density')
mu, std = stats.norm.fit(x)
xx = np.linspace(*ax.get_xlim(),100)
ax.plot(xx, stats.norm.pdf(xx, mu, std));

输出

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码