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

Echarts4r堆叠柱状图focus="series"模式下tooltip追加额外变量方案

echarts4r堆叠柱状图单分段tooltip追加占比方案

核心实现逻辑

  • 保留trigger = "item"的tooltip触发配置,该模式默认仅响应鼠标悬停到的单个柱状分段,不会展示同一x轴下其他系列内容,天然匹配单分段展示需求
  • 每个e_bar()层单独bind对应系列的百分比字段,不要将多列数据拼接为单字符串统一绑定
  • 自定义JS格式化函数,提取当前悬停分段的原始数值、绑定的百分比值,拼接为tooltip展示内容
  • 全程保留emphasis = list(focus = "series")配置,不影响原有悬停聚焦淡出其他系列的高亮效果

修正后完整可运行代码

library(echarts4r)
library(dplyr)

dt <- data.frame(zipcode =as.factor(1:3),
                 cat_a = c(1711, 1116, 1215),
                 cat_b = c(276, 1447, 1227),
                 cat_c = c(893, 794, 536),
                 percent_a = c(42.3, 27.6, 30.1),
                 percent_b = c(9.4, 49.1, 41.6),
                 percent_c = c(40.2, 35.7, 24.1),
                 total_abc= c(2880, 3357, 2978))

dt |> 
  e_charts(zipcode) |> 
  e_bar(cat_a, stack = "st", name="cat_a", y_index = 0, legend=TRUE, 
        emphasis = list(focus = "series"),
        bind = percent_a) |> 
  e_bar(cat_b, stack = "st", name="cat_b", y_index = 0, legend=TRUE, 
        emphasis = list(focus = "series"),
        bind = percent_b) |> 
  e_bar(cat_c, stack = "st", name="cat_c", y_index = 0, legend=TRUE, 
        emphasis = list(focus = "series"),
        bind = percent_c) |>
  e_title("Count by ZIP Code") |>
  e_x_axis(nameLocation= "middle", nameGap=25) |>
  e_axis_labels(x = "ZIP Codes", y="count") |>
  e_legend(bottom = 0, 
           selected = list('cat_a' = TRUE, 
                           'cat_b' = TRUE,
                           'cat_c' = TRUE)) |> 
  e_tooltip(
    trigger="item",
    textStyle=list(fontFamily="arial", fontSize=12),
    formatter = htmlwidgets::JS("
      function(params){
        return(
          params.marker + params.seriesName + '<br/>' +
          '计数:' + params.value[1] + '<br/>' +
          '占比:' + params.data.value + '%'
        )
      }
    ")
  ) |>
  e_animation(duration=2000)

之前方案失效原因

  • bind绑定百分比未生效:将所有字段拼接为单个字符串绑定后,未在tooltip格式化函数中做字符串拆分解析,且未给每个系列单独匹配对应的百分比列,导致取值错位
  • trigger="axis"模式不符合需求:该触发模式默认拉取同一x轴坐标下所有系列的数据生成tooltip,必然会展示全部分类的数值与占比,无法实现单分段单独展示的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:27:27