繁体   English   中英

Seaborn:distplot()具有相对频率

[英]Seaborn: distplot() with relative frequency

我正在尝试在Seaborn制作一些直方图用于研究项目。 我希望y轴与相对频率和x轴从-180到180.这是我的一个直方图的代码:

import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns

df = pd.read_csv('sample.csv', index_col=0)

x = df.Angle
sns.distplot(x, kde=False);

这输出: seaborn频率图

我无法弄清楚如何将输出转换为频率而不是计数。 我已经尝试了许多不同类型的图形来获得频率输出,但无济于事。 我也遇到过这个问题似乎要求带有频率的计数图 (但是有另一个功能。)我试过用它作为指南却失败了。 任何帮助将不胜感激。 我对这个软件和Python也很新。

我的数据如下所示,可以下载: 样本数据

有一个sns.displot参数允许从count转换到频率(或密度,如sns引用它)。 它通常是假的,所以你必须用True启用它。 在你的情况下:

sns.distplot(x, kde=False, norm_hist=True)

然后,如果你想让x轴从-180到180运行,只需使用:

plt.xlim(-180,180)

来自Seaborn Docs

norm_hist : bool, optional

If True, the histogram height shows a density rather than a count. This is implied if a KDE or fitted density is plotted.

特别是作为初学者,尽量保持简单。 你有一个数字列表

a = [-0.126,1,9,72.3,-44.2489,87.44]

您想要创建直方图。 为了定义直方图,您需要一些箱子。 因此,假设您要将-180和180之间的范围划分为宽度为20的区间,

import numpy as np
bins = np.arange(-180,181,20)

您可以使用numpy.histogram计算直方图,该numpy.histogram返回numpy.histogram中的计数。

hist, edges = np.histogram(a, bins)

相对频率是每个箱中的数字除以事件总数,

freq = hist/float(hist.sum())

因此,数量freq是您想要绘制为条形图的相对频率

import matplotlib.pyplot as plt
plt.bar(bins[:-1], freq, width=20, align="edge", ec="k" )

这导致下面的图,您可以从中读取例如33%的值位于0到20之间的范围内。

在此输入图像描述

完整代码:

import numpy as np
import matplotlib.pyplot as plt

a = [-0.126,1,9,72.3,-44.2489,87.44]

bins = np.arange(-180,181,20)

hist, edges = np.histogram(a, bins)
freq = hist/float(hist.sum())

plt.bar(bins[:-1],freq,width=20, align="edge", ec="k" )

plt.show()

暂无
暂无

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

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