如何修复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
相关产品推荐
相关产品推荐

