【发布时间】:2021-01-17 05:57:58
【问题描述】:
我有一个 256x256 的值矩阵,我想绘制这些值的直方图
如果我没记错的话,直方图必须在值向量中计算,对吗?所以这是我尝试过的:
from skimage.measure import compare_ssim
import numpy as np
import matplotlib.pyplot as plt
d = np.load("BB_Digital.npy")
n, bins, patches = plt.hist(x=d.ravel(), color='#0504aa', bins='auto', alpha=0.7, rwidth=0.85)
plt.grid(axis='y', alpha=0.75)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Blue channel Co-occurency matrix')
maxfreq = n.max()
# Set a clean upper y-axis limit.
plt.ylim(ymax=np.ceil(maxfreq / 10) * 10 if maxfreq % 10 else maxfreq + 10)
plt.show()
但是,我有一个非常奇怪的结果:
当我不使用 ravel 函数(使用二维矩阵)时,会显示以下结果:
但是,正如我稍后验证的那样,两个直方图似乎都是错误的:
>>> np.count_nonzero(d==0)
51227
>>> np.count_nonzero(d==1)
2529
>>> np.count_nonzero(d==2)
1275
>>> np.count_nonzero(d==3)
885
>>> np.count_nonzero(d==4)
619
>>> np.count_nonzero(d==5)
490
>>> np.count_nonzero(d==6)
403
>>> np.max(d)
12518
>>> np.min(d)
0
如何构建正确的直方图?
P.s:Here is the file 如果你能帮助我。
【问题讨论】:
-
@Xbel 同样的结果。感谢您的帮助。
-
@Xbel 只是你的数据太倾斜了。您的数据中的零太多。
-
@Xbel 即使这样直方图似乎是错误的,我也没有 60000 个零值 :-(
-
你有 51k 个零。删除零,您的数据仍然偏斜有 2.5k
1's、1.28k2's 等等。顺便说一句,看起来您正在使用图像。您还应该考虑cv2。 -
在两个轴上使用对数刻度。但我认为你最好用彩条做一个
plt.imshow。
标签: python arrays numpy matplotlib histogram