Matplotlib imshow -更改默认颜色标准化

zlwx9yxi  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(490)

在使用imshow时,我的彩色Map一直存在问题;有些颜色似乎变成了黑色。我终于意识到,imshow似乎默认情况下,归一化了我给予它的浮点值矩阵。
我本来希望像[[0,0.25],[0.5,0.75]]这样的数组显示Map中相应的颜色,对应于这些绝对值,但0.75将被解释为1。在极端情况下,0.2的N × N阵列(例如)将仅产生一个大的黑色正方形,而不是任何期望0.2在颜色图中对应的颜色(可能是20%的灰色)。
有没有办法防止这种行为?当自定义彩色图有许多不连续性时,这是特别令人讨厌的;比例的微小变化可能导致所有颜色完全改变。

gywdnpxw

gywdnpxw1#

只需指定vmin=0, vmax=1
默认情况下,imshow将数据规范化为其最小值和最大值。您可以使用vminvmax参数或norm参数(如果您想要非线性缩放)来控制。
举个简单的例子:

import matplotlib.pyplot as plt

data = [[0, 0.25], [0.5, 0.75]]

fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.get_cmap('hot'), interpolation='nearest',
               vmin=0, vmax=1)
fig.colorbar(im)
plt.show()

atmip9wb

atmip9wb2#

您还可以在imshow调用后通过在图像上定义的Normalize对象更新vminvmaxNormalize对象定义了autoscale()方法,可以更新vminvmax

import matplotlib.pyplot as plt

data = [[0, 0.25], [0.5, 0.75]]

im = plt.imshow(data, cmap='hot')
plt.colorbar(im)
im.norm.autoscale([0, 1])
#                 ^^^^^^    <---- smaller value -> vmin; greater value -> vmax

clim()也可以用于更新当前图像的vmin/vmax

im = plt.imshow(data, cmap='hot')
plt.colorbar(im)
plt.clim(0, 1)

另外,还可以通过Axes示例上的images属性访问图像,即im = plt.gca().images[0]

相关问题