如何用Plotly绘制显示行/列总计占比的热力图?
Plotly热力图实现行/列总计百分比可视化
核心实现思路
基于你已计算好的行百分比数据,通过Plotly的imshow(或Heatmap)组件,结合文本格式化和悬浮提示配置,直接在热力图中展示百分比数值。
代码示例
假设你已有包含行百分比的DataFrame,以下是完整可视化代码:
import plotly.express as px import pandas as pd # 模拟已计算好的行百分比数据(替换成你的实际数据) raw_data = { "产品A": [22.5, 35.0, 42.5], "产品B": [40.0, 25.0, 35.0], "产品C": [15.0, 55.0, 30.0] } df_percent = pd.DataFrame(raw_data, index=["区域1", "区域2", "区域3"]) # 绘制热力图 fig = px.imshow( df_percent, labels=dict(x="产品类别", y="销售区域", color="行占比(%)"), x=df_percent.columns, y=df_percent.index, text_auto=".1f%", # 自动格式化百分比,保留1位小数 color_continuous_scale="Viridis" # 可选配色方案,可根据需求替换 ) # 自定义悬浮提示内容 fig.update_traces( hovertemplate="区域: %{y}<br>产品: %{x}<br>占比: %{z:.1f}%<extra></extra>" ) # 优化布局 fig.update_layout( title="各区域产品销售占比热力图", xaxis_title="产品类别", yaxis_title="销售区域", coloraxis_colorbar=dict(title="占比(%)") ) fig.show()
关键配置说明
text_auto=".1f%":让每个单元格直接显示格式化后的百分比数值,.1f控制小数位数,可按需调整(如.0f显示整数百分比)hovertemplate:自定义鼠标悬浮时的提示信息,避免默认提示的冗余内容,更直观展示维度和占比- 若需切换为列总计百分比,只需修改百分比计算逻辑:将行求和改为列求和,即
df_percent = df.div(df.sum(axis=0), axis=1) * 100
进阶优化技巧
- 自定义配色:使用
color_continuous_scale参数指定配色,比如["#f7fbff", "#08306b"]实现渐变蓝效果 - 同时显示原始值与百分比:修改
text参数,示例逻辑如下:# 假设原始数据存储在df_raw中 text = df_percent.applymap(lambda val: f"{val:.1f}%") # 若要同时显示原始值:text = df_percent.apply(lambda row: [f"{val:.1f}% ({df_raw.loc[row.name, col]})" for col, val in row.items()], axis=1) fig.update_traces(text=text) - 调整单元格样式:通过
update_traces设置marker_line_width=1添加单元格边框,提升可读性
内容的提问来源于stack exchange,提问作者Gargi Nirmal
相关产品推荐
相关产品推荐

