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

如何修复Plotly堆叠百分比柱状图的悬停数据对比功能?

问题原因与解决方案

你的问题出在hovertemplate的格式错误:y轴是分类变量(group1的a-d),但你错误地用了数值格式化规则%{y:.2f%},这不仅显示内容错误,还会导致hover对比模式下的解析异常,出现无关数据。

关键修改点

  • 修正hovertemplate的变量对应:y轴是分类,直接显示%{y};x轴是百分比数值,用%{x:.0%}格式化显示
  • 移除冗余的customdata,直接通过%{color}调用group2的分类信息(因为color绑定了group2)
  • 调整hover模板结构,确保两种hover模式下都能正确渲染数据

修正后的完整代码

dat <- data.frame(
  group1 = rep(letters[1:4], each=5), 
  group2 = rep(LETTERS[1:5], times=4),
  pct = c(rep(.2, times=5), 
          c(.1, .1, .1, .3, .4), 
          c(.2, .2, .2, .3, .1),
          c(.3, .1, .2, .2, .2))
)

dat %>%
  plot_ly() %>%
  add_bars(
    x = ~pct, 
    y = ~group1,  
    color = ~group2,
    hovertemplate = paste0(
      "分组1: %{y}<br>",
      "分组2: %{color}<br>",
      "占比: %{x:.0%}<br>",
      "<extra></extra>"
    )
  ) %>% 
  layout(
    yaxis = list(
      title = 'Group 1', 
      autorange='reversed', 
      categoryorder='trace'
    ),
    xaxis = list(title = 'Percent', tickformat = ".0%"),
    barmode = 'stack', 
    hovermode = 'y',
    legend = list(traceorder = "normal")
  ) %>%
  config(displaylogo = FALSE)

效果验证

  • 默认hovermode='y':悬停在任意y轴分组上,会显示该分组下所有堆叠项的分组2和占比信息
  • 切换到“compare data on hover”模式:悬停在某个堆叠片段上,只会显示对应分组2的占比信息,不会出现无关数据,且可以自由切换回原始模式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:09:53