You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:41:17