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

如何在echarts4r直方图的tooltip中显示区间而非均值?

实现echarts4r直方图tooltip显示区间而非均值

可以通过两种方式实现需求,以下是具体方案:


方法一:自定义Tooltip Formatter(基于原生直方图)

通过指定直方图的组距(binWidth),再在Tooltip的自定义格式化函数中计算区间范围,无需手动统计数据:

library(data.table)
library(echarts4r)

iris %>% 
  setDT() %>% 
  e_charts() %>%
  e_histogram(
    Sepal.Width,
    name = "histogram",
    binWidth = 0.2) # 明确组距,需与下方JS代码中的值一致
  e_density(
    Sepal.Width,
    name = "density",
    y_index = 1) %>%
  e_tooltip(
    trigger = "axis",
    formatter = htmlwidgets::JS("
      function(params) {
        // 处理直方图的提示内容
        if(params[0].seriesName === 'histogram') {
          const binWidth = 0.2;
          const midValue = parseFloat(params[0].axisValue);
          const lower = (midValue - binWidth/2).toFixed(1);
          const upper = (midValue + binWidth/2).toFixed(1);
          return `区间: ${lower}-${upper}<br/>频数: ${params[0].value}`;
        } 
        // 处理密度曲线的提示内容
        else {
          return `${params[0].seriesName}: ${params[0].value.toFixed(4)}<br/>Sepal.Width: ${params[0].axisValue}`;
        }
      }
    ")
  )

方法二:手动统计区间数据,用柱状图模拟直方图

先手动计算每个区间的频数,再用e_bar绘制,完全控制Tooltip显示的内容:

library(data.table)
library(echarts4r)

# 统计区间与频数
dt <- setDT(iris)[, .(count = .N), by = .(
  interval = cut(Sepal.Width, breaks = seq(min(Sepal.Width), max(Sepal.Width), by = 0.2))
)]
# 将区间格式转为"x.x-x.x"的字符串
dt[, interval_label := gsub("\\(|\\]|\\,", "-", interval)][, interval_label := substr(interval_label, 1, nchar(interval_label)-1)]

# 绘图
dt %>% 
  e_charts(x = interval_label) %>%
  e_bar(count, name = "histogram") %>%
  e_density(Sepal.Width, name = "density", y_index = 1) %>%
  e_tooltip(trigger = "axis", formatter = htmlwidgets::JS("
    function(params) {
      let tipContent = '';
      params.forEach(item => {
        if(item.seriesName === 'histogram') {
          tipContent += `区间: ${item.name}<br/>频数: ${item.value}`;
        } else {
          tipContent += `${item.seriesName}: ${item.value.toFixed(4)}<br/>Sepal.Width: ${item.axisValue}`;
        }
      });
      return tipContent;
    }
  "))

两种方法对比

  • 方法一:无需手动统计数据,直接复用e_histogram的原生逻辑,只需保证binWidth参数与JS代码中的值一致即可。
  • 方法二:更灵活,可自定义区间划分规则,Tooltip内容完全可控,适合需要对区间做特殊调整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:45:34