使用 imshow() 将 0 表示为白色

Using imshow() to represent 0 as white

我环顾四周,并没有在网上或 matplotlib 文档中找到这个看似简单的问题的直接解决方案。我正在使用 imshow() 创建具有发散 cmap (coolwarm) 的矩阵的热图,我想让 0 表示为白色,正值表示为红色,负值表示为蓝色。有人知道无需创建自定义 cmap 即可轻松完成此操作的方法吗?

通过使用最小-最大归一化,原始数据中的零会发生偏移,因此如下所示移动零。以下是我认为可以通过这种方式完成的方法。


data = np.array([[0.000000,5.67],[-0.231049,0.45],[-0.231049,0.000000]])

k=(data-np.min(data))/(np.max(data)-np.min(data)) # Min-max Normalization

nsv_zero =-np.min(data)/(np.max(data)-np.min(data))  # new shifted value of zero

sns.heatmap(np.where( k == nsv_zero ,0.5 ,k),vmin=0,vmax=1,cmap='coolwarm',annot=data)


* Min-Max Normalization : Scale all the values to new range(0,1)
* Shifting zero in initial data to 0.5 in the new output data so as to get white color
* Here I am using modified data on heatmap, but I am using the original annotations only.

希望这更接近您所需的输出