直方图配置

时间:2014-12-14 17:28:45

标签: python numpy matplotlib histogram

我们有一组数据。 我们想要它们的直方图并以对数标度绘制它们。我们使用以下代码:

y,binEdges=np.histogram(hist_data,bins=200)
bincenters = 0.8*(binEdges[1:]+binEdges[:-1])
p.plot(bincenters,y,'-')
p.yscale('log', nonposy='clip')

结果是: Figure of bins=200

然而,当我尝试增加bin(即从bin = 200到bin = 600)时,结果是: Figure of bins=600]

如何只保留每个直方图的线而不是整个光谱?

2 个答案:

答案 0 :(得分:2)

你看到的是一些箱子为空,因此它绘制了一个来自f(y) -> 0 -> f(y+delta) -> 0 -> f(y+2*delta)的矩形。解决这个问题的一个常见技巧是不要使用尖锐的截止值作为你的bin(我们称之为 kernal )。例如,您可以使用Kernel density estimation来"平滑"超出直方图。在这种情况下,你将一堆高斯人放在你的数据点中心 - 总和反映了潜在的概率分布。您可以使用scipy来执行KDE或包含自动绘图的精美包seaborn。来自链接的seaborn示例的图片很好地说明了这一点:

enter image description here

使用matplotlib的hist而不使用绘图框,只使用histtype="step"中传递的行。

答案 1 :(得分:1)

如果某些垃圾箱为空,您可以使用boolean indexing过滤掉它们:

p.plot(bincenters[y>0],y[y>0],'-')