Mel*_*bel 3 python data-visualization matplotlib pandas 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);
Run Code Online (Sandbox Code Playgroud)
我不知道如何将输出转换为频率而不是计数。我已经尝试了多种不同类型的图来获取频率输出,但无济于事。我也遇到了这个问题,它似乎在询问具有频率的计数图(但具有另一个功能。)我曾尝试将其用作指南,但失败了。任何帮助将不胜感激。我对该软件和Python还是很陌生。
特别是作为初学者,尽量保持简单。你有一个数字列表
a = [-0.126,1,9,72.3,-44.2489,87.44]
Run Code Online (Sandbox Code Playgroud)
其中您要创建直方图。为了定义直方图,您需要一些 bin。因此,假设您要将 -180 和 180 之间的范围划分为宽度为 20 的 bin,
import numpy as np
bins = np.arange(-180,181,20)
Run Code Online (Sandbox Code Playgroud)
您可以计算直方图,numpy.histogram用于返回箱中的计数。
hist, edges = np.histogram(a, bins)
Run Code Online (Sandbox Code Playgroud)
相对频率是每个 bin 中的数量除以事件总数,
freq = hist/float(hist.sum())
Run Code Online (Sandbox Code Playgroud)
freq因此,数量是您想要绘制为条形图的相对频率
import matplotlib.pyplot as plt
plt.bar(bins[:-1], freq, width=20, align="edge", ec="k" )
Run Code Online (Sandbox Code Playgroud)
这导致了下图,您可以从中读取例如 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()
Run Code Online (Sandbox Code Playgroud)
有一个sns.displot参数允许从计数转换为频率(或密度,如sns所指)。它通常为False,因此必须将其启用为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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6993 次 |
| 最近记录: |