Seaborn:distplot()具有相对频率

时间:2017-09-02 20:45:56

标签: python pandas matplotlib data-visualization seaborn

我正在尝试在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 frequency plot

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

我的数据如下所示,可以下载heresample data

2 个答案:

答案 0 :(得分:5)

有一个sns.displot参数允许从计数转换为频率(或密度,如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.

答案 1 :(得分:4)

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

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计算直方图,并返回分档中的计数。

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之间。

enter image description here

完整代码:

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()