【问题标题】:Coloring the value of pandas dataframe through its diagonal通过其对角线为 pandas 数据框的值着色
【发布时间】:2020-12-30 21:53:13
【问题描述】:

我有一个 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 为蓝色。

感谢任何帮助。谢谢。

【问题讨论】:

    标签: python pandas matplotlib seaborn heatmap


    【解决方案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())
      

      【讨论】:

      • 嗨,克里斯,感谢您的回复。但是要求有点不同,我需要正值处于红色阴影中,负值处于蓝色阴影中。例如,对于第一个对角线,10 是最深的红色,然后 2-、-3、-2 根据它们的强度处于蓝色阴影中。
      • 所以只需将颜色图更改为发散的红蓝
      猜你喜欢
      • 2015-07-09
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      相关资源
      最近更新 更多