Matplotlib 如何绘制宽度不等的直方图,而无需从原始数据计算直方图?

Matplotlib 如何绘制宽度不等的直方图,而无需从原始数据计算直方图?,matplotlib,histogram,Matplotlib,Histogram,Matplotlib说“计算并绘制x的直方图”。我想先画一个图,不计算任何东西。我有箱子的宽度(不等)和每个箱子的总量,我想绘制一个频率-数量直方图 例如,使用数据 cm Frequency 65-75 2 75-80 7 80-90 21 90-105 15 105-110 12 它应该做出这样一个图: 其中,块的面积表示每个类中的频率。您想要: 将numpy导入为np 将matplotlib.pyplot作为plt导入 x=np.sort(np.random.r

Matplotlib说“计算并绘制x的直方图”。我想先画一个图,不计算任何东西。我有箱子的宽度(不等)和每个箱子的总量,我想绘制一个频率-数量直方图

例如,使用数据

cm      Frequency
65-75   2
75-80   7
80-90   21
90-105  15
105-110 12
它应该做出这样一个图:

其中,块的面积表示每个类中的频率。

您想要:

将numpy导入为np
将matplotlib.pyplot作为plt导入
x=np.sort(np.random.rand(6))
y=np.rand.rand(5)
plt.bar(x[:-1],y,宽度=x[1:]-x[:-1],align='edge')
plt.show()
此处
x
包含条的边缘,
y
包含高度(而不是面积!)。请注意,
x
中的元素比
y
中的元素多一个,因为边比条多一个

使用原始数据和面积计算:

来自未来进口部的

将numpy作为np导入
将matplotlib.pyplot作为plt导入
频率=np.数组([2,7,21,15,12])
bin=np.数组([65,75,80,90,105,110])
宽度=料仓[1:]-料仓[:-1]
高度=频率/宽度
plt.bar(料仓[:-1],高度,宽度=宽度,对齐=边缘)
plt.show()

与David Zwicker一样工作:

将numpy导入为np
将matplotlib.pyplot作为plt导入
freqs=np.数组([2,7,21,15,12])
bin=np.数组([65,75,80,90,105,110])
宽度=料仓[1:]-料仓[:-1]
高度=频率A类型(np浮动)/宽度
在(箱重复(2)[1:-1],高度重复(2),面颜色='steelblue')之间填充
plt.show()

有没有办法获得与
histtype='stepfilled'
相同的效果?这些示例不再适用。酒吧的默认位置已更改?