使用 matplotlib 或 seaborn 绘制热图?

Heatmap drawing using matplotlib or seaborn?

我是 Python 的新手。我需要使用这样的数据框在每个网格中绘制带有注释的热图:

t=pd.DataFrame({'ReturnType':['ReturnWithoutReceipt','Return With Receipt',
                          'ReturnWithoutReceipt','Return With Proof Of Purchase','Return With Proof Of Purchase',
                'Return With Receipt'],
                'Payment':['Card','Cash','Cash','Cash','Card','Card'],
                'Hour':[11,12,12,14,16,16],
                'value':[1,26,3,67,17,37],
                'Label':['1.0--11','26.0--12','3.0--12','67.0--14','17.0--16','37.0--16']})

在我的热图中,行是 ReturnType,列是 Payment。颜色由值决定。标签需要显示在每个网格中。因此,该图将如下所示:

那么如何使用 matplotlib 或 seaborn 来实现呢?

我认为您误解了什么是热图。热图是 M 行 N 列的矩形阵列,其中某些索引 (m, n) 处的计数用颜色表示。

根据您的问题,'value:' 的形状不等于 'ReturnType:'Payment:' 的乘积。

首先通过 set_index and unstack 重塑 DataFrame:

df = t.set_index(['ReturnType','Payment']).unstack()
print (df)
                              Hour      value          Label          
Payment                       Card Cash  Card Cash      Card      Cash
ReturnType                                                            
Return With Proof Of Purchase   16   14    17   67  17.0--16  67.0--14
Return With Receipt             16   12    37   26  37.0--16  26.0--12
ReturnWithoutReceipt            11   12     1    3   1.0--11   3.0--12

Select 每个 DataFrame by xs(因为 MultiIndex 在列中)

df1 = df.xs('value', axis=1, level=0)
lab = df.xs('Label', axis=1, level=0)
print (df1)
Payment                        Card  Cash
ReturnType                               
Return With Proof Of Purchase    17    67
Return With Receipt              37    26
ReturnWithoutReceipt              1     3

print (lab)
Payment                            Card      Cash
ReturnType                                       
Return With Proof Of Purchase  17.0--16  67.0--14
Return With Receipt            37.0--16  26.0--12
ReturnWithoutReceipt            1.0--11   3.0--12

最后传递第二个 DataFrame 到参数 annot,显示标签的想法来自 :

ax = sns.heatmap(df1, annot=lab, fmt="")