给定间隔端点和值,绘制直方图

3
假设我有一个存储了区间边界的数组和一个存储了区间值的数组(基本上就是 plt.hist 的输出结果)。例如:
bins = np.array([1, 2, 3, 4, 5])
vals = np.array([2, 5, 5, 2])

我该如何将其绘制成直方图?
编辑:为了更清楚,我的意思是将vals作为每个bin的“高度”,其中len(vals)+1 = len(bins)。
2个回答

3
如果您使用的是Python 3.5,您可以使用pyplot fill_between函数实现此功能。您可以使用以下代码:
import numpy as np
import matplotlib.pyplot as plt
bins = np.array([1, 2, 3, 4, 5])
vals = np.array([2, 5, 5, 2])

plt.fill_between(bins,np.concatenate(([0],vals)), step="pre")
plt.show()

这将生成以下图表: 使用step命令生成的图表

这是不正确的,因为它将使用“vals”作为输入“x”值来生成直方图,而不是OP所请求的条形柱的实际高度。 - Gabriel
1
你是对的@Gabriel。我误解了OP想要从值中生成直方图的意思。我更新了答案以符合问题的答案。我添加了另一个不同于其他答案的选项。不幸的是,它只适用于“python 3.5”。 - Cedric Zoppolo
如果您想要在每个条形图的轮廓线上添加线条,则可以使用以下代码:x=np.array([bins,bins,bins]).T.reshape(-1)[1:-1]y=np.insert(np.array([vals,vals,np.repeat(0,len(vals))]).T.reshape(-1), 0, 0),最后使用 plt.plot(x,y) - Stefano

2
你可以使用一个条形图

enter image description here

bins = np.array([1, 2, 3, 4, 5])
vals = np.array([2, 5, 5, 2])
plt.bar((bins[1:] + bins[:-1]) * .5, vals, width=(bins[1] - bins[0]))
plt.show()

关键是使用你的“边缘”的中点 (bins[1:] + bins[:-1]) * .5,并设置宽度为 (bins[1] - bins[0]),假设你的整个直方图具有恒定的宽度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接