繁体   English   中英

绘制具有正常曲线的直方图并命名为seaborn中的箱

[英]Plot a histogram with normal curve and name the bins in seaborn

在此输入图像描述

大家好,我试图使用不同数据集的seaborn绘制以下类型的情节。 问题是当使用直方图类型时,即使它提供了内核曲线,我也无法命名区域(如2-2.5,2.5-3..etc)。 条形图没有绘制正常曲线的功能,如图中所示。 图像似乎是使用SPSS统计包,我对它知之甚少。

以下是我能得到的最接近的东西(我附上了代码)

df = pd.DataFrame({'cat': ['1-1.5', '1.5-2', '2-2.5','2.5-3','3-3.5','3.5-4','4-4.5','4.5-5'],'val': [0,0,1,7,7,33,17,10]})
ax = sns.barplot(y = 'val', x = 'cat', 
              data = df)
ax.set(xlabel='Categories', ylabel='Frequency')
plt.show()

在此输入图像描述

所以问题当然是你没有原始数据,而是已经分箱的数据。 可以反转此分箱并从一组原始数据开始。 然后再次执行直方图并使用sns.distplot ,默认情况下sns.distplot显示KDE图。

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

cat = ['1-1.5', '1.5-2', '2-2.5','2.5-3','3-3.5','3.5-4','4-4.5','4.5-5']
val = [0,0,1,7,7,33,17,10]
data = []
for i in range(len(cat)):
    data.extend([1.25+i*0.5]*val[i])
bins = np.arange(1,5.5, 0.5)

ax = sns.distplot(data, bins=bins, hist_kws= dict(edgecolor="k"))
ax.set(xlabel='Categories', ylabel='Frequency')
ax.set_xticks(bins[:-1]+0.25)
ax.set_xticklabels(cat)

plt.show()

在此输入图像描述

使用KDE函数的bw关键字参数来设置曲线的平滑度。 例如sns.distplot(data, bins=bins, kde_kws=dict(bw=0.5), hist_kws= dict(edgecolor="k"))其中bw=0.5产生

在此输入图像描述

同时尝试bw=0.1bw=0.25bw=0.35bw=2以查看差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM