检索 Matplotlib 热图颜色

Retrieving Matplotlib Heatmap Colors

我正在尝试检索由 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

, you need to understand the default color map chosen by matplotlib since you didn't provide one. The documentation 的基础上声明它是 plt.rcParams["image.cmap"] 的值,因此我们使用它。

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]

您正在查找通过 imshow 创建的图像所使用的颜色图。现在,您当然可以像其他答案所建议的那样,首先对颜色图如何进入图像进行逆向工程。这看起来很麻烦,而且通常甚至是不可能的。

因此给定一个 AxesImageimshow 返回的对象)或任何其他 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颜色数组。