Python中的缩放对数合并

Sar*_*akC 3 python matplotlib histogram

我对绘制作为幂定律分布的一组点的概率分布感兴趣。此外,我想使用对数合并来消除尾部的较大波动。如果我仅使用对数分箱,并将其以对数对数刻度绘制,例如

pl.hist(MyList,log=True, bins=pl.logspace(0,3,50))
pl.xscale('log')
Run Code Online (Sandbox Code Playgroud)

例如,那么问题是较大的垃圾箱占了更多的点,即我的垃圾箱的高度没有按垃圾箱的大小缩放。

有没有一种方法可以使用对数分箱,但是让python通过分箱的大小来缩放所有高度?我知道我可以手动以某种回旋方式完成此操作,但是似乎这应该是一个存在的功能,但是我似乎找不到它。如果您认为直方图从根本上来说是代表我的数据的一种不好的方式,并且您有一个更好的主意,那么我也很想听听。

谢谢!

tjo*_*ans 6

如果您对直方图有特殊要求,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')
Run Code Online (Sandbox Code Playgroud)

显然,当您以这种非显而易见的方式显示数据时,必须非常注意如何正确标记y轴并编写内容丰富的图形标题。