#python #pandas #matplotlib #seaborn #heatmap
#python #pandas #matplotlib #seaborn #тепловая карта
Вопрос:
У меня есть фрейм данных pandas, который используется для раскраски тепловой карты. Я хочу раскрасить значение по диагоналям фрейма данных. Если диагональ содержит пять значений как [-1,2,0, -2,5], я хочу раскрасить их как 0 в «белом», затем 2 в светло-красном, 5 в самом темном красном, а затем -1 в светло-синем, -2 в самом темном синем (просто чтобы указать интенсивности между значениями, где более темные красные цвета соответствуют положительному значению, а более темные синие — отрицательному значению). Пример кода приведен ниже:
import pandas as pd
import seaborn as sns
list1 = [[10],[5,-2],[-1,2,-3],[4,-5,3,-2]]
dfff = pd.DataFrame(l1)
print (dfff)
sns.heatmap(dfff,square=True, linewidths=.5, cbar_kws={"shrink": .5})
Я хочу, чтобы диагонали были окрашены, как в первом случае, первая диагональ была бы [10,-2,-3,-2]. Я хочу, чтобы они были окрашены как 10 с самым темным красным, 2-,-3, -2 оттенками синего в соответствии с их интенсивностью.
Любая помощь приветствуется. Спасибо.
Ответ №1:
Вы можете получить доступ к диагоналям, сказав
for i, row in enumerate(list1):
row[i] == *whatever*
Не уверен, на что вы хотите их установить, хотя
Ответ №2:
import pandas as pd
import numpy as np
import seaborn as sns
l1 = [[10],[5,-2],[-1,2,-3],[4,-5,3,-2]]
dfff = pd.DataFrame(l1)
for x, c in zip(range(1,dfff.shape[0] 1), ['Blues','Reds','Purples','Oranges']):
sns.heatmap(dfff.mask(dfff.notna().cumsum().gt(x), np.nan), square=True, linewidths=.5, cmap=c, mask=dfff.mask(~dfff.notna().cumsum().gt(x-1), np.nan).isna())
Комментарии:
1. Привет, Крис, спасибо за твой ответ. Но требование было немного другим, мне нужно, чтобы положительные значения были в оттенках красного, а отрицательные значения — в оттенках синего. Например, здесь для первой диагонали 10 будет самым темно-красным, а затем 2-,-3, -2 будут в оттенках синего в соответствии с их интенсивностью.
2. Итак, просто измените цветовую карту на расходящийся красный синий