使用 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="")
我是 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="")