如何用Plotly绘制以DataFrame索引为X轴、列名为Y轴的热力图?
问题描述
给定如下DataFrame:
import pandas as pd import plotly.express as px df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6]}) print(df)
输出结果:
A B 0 1 4 1 2 5 2 3 6
使用px.density_heatmap(df)生成的热力图不符合需求,实际需要将索引(0,1,2)作为X轴,列名(A,B)作为Y轴,单元格数值用颜色表示的热力图。
解决方案
方法一:使用px.imshow(推荐)
px.imshow专为矩阵型热力图设计,直接匹配你的需求:
import pandas as pd import plotly.express as px df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6]}) fig = px.imshow( df, x=df.columns, y=df.index, labels=dict(x="列名", y="索引", color="单元格数值"), text_auto=True # 可选:在单元格内显示对应数值 ) fig.show()
- 该方法默认将行索引作为Y轴、列名作为X轴,无需额外转换数据;
text_auto=True可在热力块上显示数值,提升可读性;- 可通过
color_continuous_scale参数自定义配色方案。
方法二:转换为长格式后使用px.density_heatmap
如果坚持使用px.density_heatmap,需先将数据转为长格式:
import pandas as pd import plotly.express as px df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6]}) # 转换为长格式 df_melted = df.reset_index().melt(id_vars="index", var_name="列名", value_name="数值") fig = px.density_heatmap( df_melted, x="index", y="列名", z="数值", labels=dict(x="索引", y="列名", z="单元格数值"), text_auto=True ) fig.show()
内容的提问来源于stack exchange,提问作者Oblomov
相关产品推荐
相关产品推荐

