2017-09-02 196 views
0

我想在Seaborn中为一个研究项目制作一些直方图。我想,y轴相对于频率和x轴从-180到运行180 这里是我有我的直方图的一个的代码:Seaborn:相对频率的distplot()

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

+0

数据的比特将是很有益应答。 – Dark

+0

@Bharathshetty我的歉意。编辑包含数据的问题。 –

+0

这对回答者提供复制粘贴格式的数据很有帮助。类似于'df = pd.DataFrame({'number':[1,2,3,4,5,6],'angle':[-0.126,1,9,72.3,-44.2489,87.44]})'' 。 – 3novak

回答

3

特别是作为一个初学者,尽量让事情变得简单。你有一个号码列表

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

其中你要创建一个直方图。为了定义直方图,你需要一些bin。所以我们说要划分-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()