检索Matplotlib热图颜色

3

我试图获取由imshow()函数生成的matplotlib热力图上每个单元格的颜色,例如下面magic_function所执行的操作:

import matplotlib.pyplot as plt
import numpy as np
hm = plt.imshow(np.random.rand(10, 10))
color_matrix = hm.magic_function() #returns matrix containing the RGB/Hex values of each cell
2个回答

2
你正在寻找由imshow创建的图像使用的颜色映射。当然,你可以像另一个答案建议的那样反向工程出颜色映射是如何首先进入图像中的。这似乎很麻烦,而且通常甚至不可能。
因此,给定一个AxesImage(由imshow返回的对象)或任何其他ScalarMappable,你可以通过.cmap获取正在使用的颜色映射。由于数据值被规范化为0..1之间的范围,你需要一个归一化,可以从.norm属性获得。最后,你需要数据,可以通过.get_array()方法获得。
因此,magic_function是三个函数的链。
im = plt.imshow(np.random.rand(10, 10))
color_matrix = im.cmap(im.norm(im.get_array()))
color_matrix现在是一个(10, 10, 4)形状的RGBA颜色数组,对应于图像中的像素。将其翻译为:颜色矩阵现在是一个(10, 10, 4)的RGBA颜色数组,它对应于图像中的每个像素。

1
这个答案的基础上,由于您没有提供默认的颜色映射方式,因此需要了解matplotlib选择的默认颜色映射。文档说明它是plt.rcParams["image.cmap"]的值,因此我们使用它。请保留HTML标签。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm
from matplotlib.colors import Normalize

data = np.random.rand(10, 10)
cmap = cm.get_cmap(plt.rcParams["image.cmap"])
hm = plt.imshow(data)


norm = Normalize(vmin=data.min(), vmax=data.max())
rgba_values = cmap(norm(data))

上左角单元格的RGBA值将是rgba_values[0,0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接