技术求助:基于pandas透视表生成Plotly热力图遇问题
别着急!刚接触编程遇到这种卡壳的情况太正常了,我来帮你一步步搞定用Pandas透视表生成Plotly热力图的事儿~
第一步:先把透视表调整成正确格式
首先得确保你的Pandas透视表是宽格式——也就是把4种所有权类型放在列的位置,国家放在行的位置,数值填在对应的单元格里。举个例子,正确的结构大概是这样:
| 国家 | 所有权类型A | 所有权类型B | 所有权类型C | 所有权类型D |
|---|---|---|---|---|
| 中国 | 100 | 200 | 150 | 300 |
| 美国 | 180 | 220 | 190 | 250 |
如果你的原始数据是「长格式」(比如每一行是一个国家+一种所有权类型+对应数值),可以用pd.pivot_table()快速转成宽表,代码示例如下:
import pandas as pd # 假设你的原始数据存储在df里,列名分别是"国家"、"所有权类型"、"数值" pivot_df = pd.pivot_table( df, index="国家", # 把国家作为y轴的行 columns="所有权类型", # 把所有权类型作为x轴的列 values="数值", # 热力图颜色对应的数值 aggfunc="sum" # 如果有重复的组合,用sum/mean等聚合,按需选择 )
第二步:用Plotly生成热力图
搞定透视表之后,就可以用Plotly绘制热力图了,代码非常直观:
import plotly.express as px # 生成热力图 fig = px.imshow( pivot_df, labels=dict(x="所有权类型", y="国家", color="数值"), # 设置轴和颜色的说明标签 x=pivot_df.columns, # x轴对应透视表的列(所有权类型) y=pivot_df.index, # y轴对应透视表的行(国家) color_continuous_scale="Blues" # 可选颜色方案,比如"Reds"、"Viridis"都可以 ) # 调整布局让图表更美观 fig.update_layout( title="国家-所有权类型热力图", # 自定义图表标题 xaxis_title="所有权类型", yaxis_title="国家", xaxis_tickangle=-45 # 把x轴标签倾斜45度,避免名称重叠 ) # 显示图表 fig.show()
几个容易踩的小坑
- 如果透视表里有缺失值(NaN),Plotly会显示浅色空白,你可以用
pivot_df.fillna(0)把缺失值替换成0,或者根据你的业务需求处理; - 要是还没安装Plotly和Pandas,先在终端里跑
pip install pandas plotly完成安装; - 哪怕你的所有权类型不止4种也没关系,Plotly会自动适配所有列。
内容的提问来源于stack exchange,提问作者Javi Smith
相关产品推荐
相关产品推荐

