本文介绍了如何在海上平面图上绘制法线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
DISPLOT受到抨击,转而支持DISPLATE。
上一个函数具有绘制正常曲线的选项。
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不再与dislot一起使用。在这个question的答案中,我看到了稍后绘制正态分布的方法,但是它是在一些平均在0左右的随机数据上完成的。
推荐答案
seaborn.displot是图形级别绘图,其中kind参数指定方法。当kind='hist'seaborn.histplot的参数可用时。- 有关轴级曲线图,请参阅How to add a standard normal pdf over a seaborn histogram
seaborn.axisgrid.FacetGrid.map需要DataFrame列名,因此,要将pdf映射到seaborn.displot,数据需要在DataFrame中。- 问题是
x_pdf计算每个axes:x0, x1 = p1.axes[0][0].get_xlim()- 如果多个方面(
sharex=False)的axes不同,则无法获取.map内每个axes的xlim。
- 引用:
- seaborn histplot and displot output doesn't match
- Building structured multi-plot grids
- 测试于
python 3.8.11、pandas 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')
这篇关于如何在海上平面图上绘制法线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
The End


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)