Получение цветов Matplotlib Heatmap - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь получить цвета каждой ячейки на тепловой карте matplotlib, сгенерированной функцией imshow(), например, выполняемой 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 ]

0 голосов
/ 20 февраля 2019

Вы ищете цветовую карту, которая используется изображением, созданным с помощью 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, соответствующий пикселям на изображении.

0 голосов
/ 20 февраля 2019

Опираясь на этот ответ , вам необходимо понять цветовую карту по умолчанию, выбранную matplotlib, поскольку вы ее не предоставили.В документации указано, что это значение 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]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...