通过对角线为熊猫数据框着色

时间:2020-09-12 17:12:56

标签: python pandas matplotlib seaborn heatmap

我有一个熊猫数据框,用于热图着色。我想沿数据框的对角线为值上色。如果对角线包含五个值为[-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,蓝色为蓝色。

感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以说出对角线

for i, row in enumerate(list1):
    row[i] == *whatever*

不确定要设置的内容

答案 1 :(得分:0)

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())

enter image description here