Раскраска значения фрейма данных pandas по его диагонали

#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. Итак, просто измените цветовую карту на расходящийся красный синий