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

Python & Plotly:向密度热力图添加悬停数据失败问题排查

问题原因与解决方案

嘿,我完全懂你遇到的这个坑——这是因为px.density_heatmap本质是对原始数据做分箱聚合生成的图表:每个热力图单元格对应一组落在x/y分箱区间内的原始数据点,默认只会展示分箱的x/y范围和聚合后的count(该单元格内的数据点数量)。

当你直接传入hover_data=['size']时,Plotly会犯难:一个单元格里可能有好几个原始数据行,每个行的size值都可能不一样,它没法直接把一堆零散的值塞进悬停提示里,所以干脆就不显示这个字段了。

解决方法:指定size的聚合方式

你需要用字典格式的hover_data,明确告诉Plotly你想对size做什么统计(比如均值、最大值、最小值等),这样它就能把聚合后的结果规整地展示在悬停提示里。

举个实际例子,如果你想显示每个单元格内size的平均值、最小值和最大值,可以这么写:

fig = px.density_heatmap(
    df,
    x="total_bill",
    y="tip",
    hover_data={
        'size': ['mean', 'min', 'max']
    }
)
fig.show()

额外技巧:自定义悬停提示格式

如果你想更精细地控制悬停提示的排版和内容,可以搭配hovertemplate参数,把聚合后的字段按你想要的样式展示:

fig = px.density_heatmap(
    df,
    x="total_bill",
    y="tip",
    hover_data={
        'size': ['mean']
    },
    hovertemplate=(
        "消费总额: %{x}<br>"
        "小费: %{y}<br>"
        "数据点数量: %{z}<br>"
        "平均就餐人数: %{customdata[0]:.2f}<extra></extra>"
    )
)
fig.show()

这里的customdata[0]对应我们在hover_data里指定的第一个聚合结果(也就是size的均值),%{z}就是默认的count值,<extra></extra>用来隐藏Plotly默认的额外标签。

这样调整后,悬停提示里就会出现你想要的size相关数据啦!

内容的提问来源于stack exchange,提问作者Astrodude11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:07:28