首页 > 解决方案 > Python 直方图总是有不正确的 bin

问题描述

我正在尝试使用plt.hist在 Python 中绘制直方图。这是我要绘制的数组:

[162 162 162 162 162 162 162 162 164 161 163 163 160 155 162 162 162 160 154 162 162 162 162 163 163 162 162 162 162 162 160 165 165 165 165 162 162 162 162 161 155 163 163 163 162 162 162 162 162 162 162 162 162 163 163 163 163 163 165 165 165 163 163 163 163 163 161 161 161 154 162 162 162 162 162 162 162 162 162 162 163 163 163 161 162 156 162 160 165 161 162 160 154 163 161 155 163 162 163 160 163 157 163 161 165 161 162 160 155 162 160 155 164 164 159 155 161 159 158 160 161 161 155 159 154 154 156 155 160 160 163 158 160 163 159 156 159 162 156 163 155 154 156 152 158 158 154 156 158 158 156 157 158 160 160 159 153 152 153 150 154 155 158 158 159 160 156 157 163 157 158 159 159 155 156 157 154 155 157 158 155 154 155 157 160 154 154 157 157 157 156 153 157 156 156 161 157 155 154 153 159 158 157 157 158 155 159 154 156 156 156 158 159 155 150 148 158 159 156 157 157 155 157 158 158 158 157 156 157 153 159 156 160 156 158 156 156 153156 156 157 157 157 157 160 157 156 156 159 155 154 158 156 155 154 160 158 158 159 155 155 158 158 156 155 156 151 158 157 156 156 155 158 158 159 157 155 158 157 154 157 157 157 159 155 156 154 156 ]

这是我的简单代码:

hst = plt.hist(stego_histogram , bins=256) 
plt.show()

该数组由图像的一些像素构成。显然,8 位深度图像有 256 个值,这就是我选择那个 bin 的原因。但是,随着该值从 148 变为 165,直方图返回此范围内的值,但分为 256 个值。

我试图用其他 bin 值(16、17、18 ..)配置直方图,但它从来没有打印好。这是 bins=18 的直方图:

在此处输入图像描述

如何正确绘制此直方图?我只想要这个值的条形直方图。谢谢。

标签: pythonarraysmatplotlibhistogram

解决方案


直方图所做的只是计算一个值重复的次数,然后为每个可能的值绘制一个垂直条,每个垂直条的高度是该值的出现次数。

如果您想要 0 到 255 之间的完整直方图,则需要在 hist 调用中指定名为 range 的参数。

否则,您也可以使用 matplotlib 中的 bar 方法来显示您在此处提供的数组。

这是matplot bar 的文档


推荐阅读