在python中的缩放对数binning

时间:2016-05-11 18:20:34

标签: python matplotlib histogram

我有兴趣绘制一组作为幂律分布的点的概率分布。此外,我想使用对数binning来平滑尾部的大波动。如果我只使用对数分箱,并将其绘制在日志对数刻度上,例如

pl.hist(MyList,log=True, bins=pl.logspace(0,3,50))
pl.xscale('log')
例如,问题是较大的箱子占了更多的点数,即我的箱子的高度没有按箱子大小缩放。

有没有办法使用对数binning,然后根据bin的大小使python缩放所有高度?我知道我可以手动以某种迂回方式做到这一点,但看起来这应该是一个存在的功能,但我似乎无法找到它。如果您认为直方图从根本上说是一种表达我的数据的糟糕方式,并且您有更好的想法,那么我也很乐意听到它。

谢谢!

1 个答案:

答案 0 :(得分:4)

如果您对直方图有特殊要求,Matplotlib对您没有多大帮助。但是,您可以使用numpy轻松创建和操作直方图。

import numpy as np
from matplotlib import pyplot as plt

# something random to plot
data = (np.random.random(10000)*10)**3

# log-scaled bins
bins = np.logspace(0, 3, 50)
widths = (bins[1:] - bins[:-1])

# Calculate histogram
hist = np.histogram(data, bins=bins)
# normalize by bin width
hist_norm = hist[0]/widths

# plot it!
plt.bar(bins[:-1], hist_norm, widths)
plt.xscale('log')
plt.yscale('log')

显然,当您以非显而易见的方式呈现数据时,您必须非常小心如何正确标记您的y轴并编写信息图标题。