我们如何在热图中绘制来自多索引数据框的数据?
Posted
技术标签:
【中文标题】我们如何在热图中绘制来自多索引数据框的数据?【英文标题】:How can we plot data from a multi-index dataframe in a heatmap? 【发布时间】:2021-10-11 18:40:09 【问题描述】:我正在像这样旋转一个数据框。
pvt = pd.pivot_table(df_build, values='Expense', index=['Name'], columns=['Comments', 'Venue'], aggfunc=np.sum)
pvt = pvt.fillna(0)
pvt.columns
现在,我有一个包含这些列的数据框。
MultiIndex([( 'Build', 'Arena'),
( 'Build', 'Stadium'),
( 'Add', 'Arena'),
( 'New', 'Stadium'),
( 'Replace', 'Arena')],
names=['Comments', 'Venue'])
我正在尝试将此数据绘制为热图。我更喜欢使用 Plotly,但 Seaborn 也很好。我以为下面的代码会起作用,但它没有。
df_fin = pvt.reset_index().pivot(columns='Comments', index='Venue', values='Expense')
ax = sns.heatmap(df_fin)
ax.plot()
也许需要发生某种融化。不确定。如何将此数据绘制为热图?
【问题讨论】:
【参考方案1】: 已经模拟了我认为是您的旋转数据框的结构 核心是重塑这个数据框,使其与https://plotly.com/python/heatmaps/#heatmap-with-plotlyexpress-and-pximshow兼容stack()
热图y轴
确保索引只有一级 (droplevel()
)
生成图形
import pandas as pd
import numpy as np
import plotly.express as px
# build df that matches pivoted df
df = pd.DataFrame(
index=pd.MultiIndex.from_arrays(
[
["Build", "Build", "Add", "New", "Replace"],
["Arena", "Stadium", "Arena", "Stadium", "Arena"],
],
names=["Comments", "Venue"],
),
data = np.random.randint(1,5,5)
).T
# now restructure it for plotly
dfp = df.stack("Venue").droplevel(0,0)
# finally a simple plotly figure...
px.imshow(dfp.values, x=dfp.columns, y=dfp.index)
【讨论】:
完美运行!感谢您的帮助!以上是关于我们如何在热图中绘制来自多索引数据框的数据?的主要内容,如果未能解决你的问题,请参考以下文章