Как построить массив как временную серию тепловой карты - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь создать тепловую карту sns, где каждая строка представляет одну запись массива.Мой массив выглядит так:

arr = [[a, b, c], [b, c, d], [e, f, g]]

У меня есть словарь цветов, который приписывает цвет каждой записи.Я создал другой массив, используя эти два массива так, чтобы он содержал порядок цветов, который должен быть нанесен на карту (то есть:

col = [[c0, c1, c2], [c1, c2, c3], [c4, c5, c6]]

, где c0,1 .. - все шестнадцатеричные цветовые коды. Есть ли способ сделать это втепловая карта?

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

col уже является тепловой картой. К сожалению, matplotlib не может напрямую отображать шестнадцатеричные цвета как изображения, поэтому вам нужно сначала преобразовать их в rgb.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors


col = [["#" + "".join(np.random.choice(list("0123456789abcdef"),6))
                for _ in range(4)] for _ in range(4)]


col = np.array(col)
img = mcolors.to_rgba_array(col.flatten()).reshape(*col.shape, 4)

plt.imshow(img)

plt.show()

enter image description here

1 голос
/ 08 июня 2019

Параметр cmap выполняет работу. (DOC) .Вы можете определить свою собственную палитру с помощью color_palettes метода (документ)

Здесь я сопоставляю 0 как первый элемент вашего списка цветов, 1 как 2-йэлемент вашего списка цветов и так далее.

Здесь код:

# import modules
import seaborn as sns
import matplotlib.pyplot as plt

#Init seaborn
sns.set()

# Your data as decimal array
col = [[0, 1, 2], [1, 2, 3], [4, 5, 6]]

# Your custum color palette
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71",  "#30095e"]

# Draw heatmap with the custom palette color
ax = sns.heatmap(col, cmap=sns.color_palette(flatui))

# Show graph
plt.show()

enter image description here

...