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

问题描述 投票:0回答:1

我找了一圈,没有在网上或matplotlib文档中找到这个看似简单的问题的直接解决方案。我正在使用imshow()创建一个带有分叉cmap(coolwarm)的矩阵热图,我想让0表示为白色,正值表示为红色,负值表示为蓝色。谁知道有什么简单的方法可以在不创建自定义cmap的情况下做到这一点?

python matplotlib heatmap imshow
1个回答
0
投票

通过使用min-max归一化,这里原始数据中的零会被移位,所以将零移位,如下图所示。 下面是我想出的一种方法,可以用这种方法来完成。


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.

希望这个离你要求的输出更近一些

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.