如何在matplotlib中为不等间隔的区间绘制相同宽度的直方图

6 投票
1 回答
2324 浏览
提问于 2025-04-17 22:42

我正在尝试用matplotlib画一个包含多个数据系列的直方图。

我的数据分组(也就是“箱子”)的间隔不一样,但我希望每个箱子的宽度都相同。所以我用了一种方式来设置width属性:

aa = [0,1,1,2,3,3,4,4,4,4,5,6,7,9]
plt.hist([aa, aa], bins=[0,3,9], width=0.2)

结果是这样的:

间隔不均的直方图

我该如何去掉两个系列对应的箱子之间的空隙呢?也就是说,如何把不同系列的条形图放在每个箱子里一起显示?

谢谢

1 个回答

3

一种解决方法是使用numpy来计算直方图,然后手动绘制每个柱子:

aa1 = [0,1,1,2,3,3,4,4,5,9]
aa2 = [0,1,3,3,4,4,4,4,5,6,7,9]
bins = [0,3,9]
height = [np.histogram( xs, bins=bins)[0] for xs in [aa1, aa2]]
left, n = np.arange(len(bins)-1), len(height)

ax = plt.subplot(111)
color_cycle = ax._get_lines.color_cycle

for j, h in enumerate(height):
    ax.bar(left + j / n, h, width=1.0/n, color=next(color_cycle))

ax.set_xticks(np.arange(0, len(bins)))
ax.set_xticklabels(map(str, bins))

hist

撰写回答