Matplotlib的imshow为何无法将0.5渲染为灰色?
问题原因与解决办法
你遇到的问题根源在于plt.imshow()的自动归一化行为:默认情况下,它会把输入数据的最小值映射到colormap的最低端(黑),最大值映射到colormap的最高端(白)。
当你用np.identity(5)生成矩阵时,数据范围是0和1,此时imshow刚好把0对应黑、1对应白,符合预期。但乘以0.5后,矩阵的取值范围变成了0到0.5,imshow会自动把这个范围拉伸到0-1的colormap区间——也就是把0.5当成了"最大值",直接映射成全白,所以对角线还是白色。
要实现0对应黑、1对应白、0.5对应灰色的效果,只需要显式指定vmin和vmax参数,强制锁定colormap的取值范围:
import numpy as np import matplotlib.pyplot as plt matrix = 0.5 * np.identity(5) # 指定vmin=0(黑),vmax=1(白),让0.5对应中间灰色 plt.imshow(matrix, cmap='grey', vmin=0, vmax=1) plt.show()
这样运行后,对角线就会显示你预期的灰色了。之前绘制MNIST时能正常显示,大概率是因为当时的手写数字数据本身就是0-1范围,或者你隐式/显式设置了vmin和vmax参数,避免了自动归一化的影响。
内容的提问来源于stack exchange,提问作者scribe
相关产品推荐
相关产品推荐

