使用matplotlib绘制总计在直方图区间的图表

4 投票
1 回答
2721 浏览
提问于 2025-04-17 19:06

我正在尝试显示一个直方图。下面的数组是直方图中每个小格的计数。

binVals = [0,5531608,6475325,1311915,223000,609638,291151,449434,1398731,2516755,3035532,2976924,2695079,1822865,1347155,304911,3562,157,5,0,0,0,0,0,0,0,0,0]

我该怎么做呢?我尝试了这段代码

import matplotlib.pyplot as plt
binVals = [0,5531608,6475325,1311915,223000,609638,291151,449434,1398731,2516755,3035532,2976924,2695079,1822865,1347155,304911,3562,157,5,0,0,0,0,0,0,0,0,0]
plt.hist(binVals, bins=len(binVals), color='r', alpha=0.5, label='Values')
plt.title("Demo Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.legend()
plt.show()

结果出来的图像像这样 示例直方图

不过这有点问题,因为在binVals中,0号和19到27号的小格的计数都是零。上面图像中的零值并不在我预期的位置。

我希望得到的效果类似于这个

预期图像

我该如何修改我的代码才能得到这样的结果呢?

另外,预期图表底部有漂亮的标签小格。这可以用matlibplot实现吗?

1 个回答

2

我觉得你画的东西不太对。Matplotlib会自己计算直方图。现在它显示你有14个区间,值在0到250,000之间,3个区间的值在250,000到500,000之间,等等。如果你自己计算直方图,可以用bar()函数来画,或者让Matplotlib帮你计算直方图。

对于刻度标签,可以使用 set_xticklabels(["600以下", "600-700",...], rotation = "vertical") 来设置。

(我把评论变成了答案,这样就可以标记为已回答了)

撰写回答