“e_tooltip(formatter =)”如何显示直方图列的间隔而不是平均值?

gab6jxml  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(56)

我有一个直方图,需要看的不是直方图列的平均值(图片上的2.9),而是它的间隔(2.8-3.0)。如何做到这一点?
示例代码:

iris %>% setDT() %>% 
    e_charts() %>%
    e_histogram(
        Sepal.Width,
        name = "histogram") %>%
    e_density(
        Sepal.Width,
        name = "density",
        y_index = 1) %>%
    # e_tooltip(trigger = "axis")
    e_tooltip(trigger = "axis")

我看到的和我想看到的:

sg24os4d

sg24os4d1#

为了添加这些信息,我编写了一个JS函数,用于调用e_tooltip,只有一个元素不能动态获取-数据的行数。
在JS中,您可以看到数字32,这是在此代码中必须更新的唯一信息(除了e_函数中的数据)。
假设:

  • 调用直方图时未指定binwidthecharts4r计算的bin宽度)
  • 绘图仪的第一个系列是直方图
  • 图的第二个系列是密度

使用行计数和这个函数来创建你想要的格式化工具提示。

ttFrm <- function(rowCt) { # use row count to call function
  htmlwidgets::JS(paste0("
    function(data) {
      console.log(data);
      h = data[0];            /* histogram */
      d = data[1];            /* density */

      bc = h.value[1];        /* bin count */
      ds = d.value[1];        /* density */

      /* bin width = count in bin / count in dataset / density */
      br = bc/", rowCt, "/ds/2;        /* bin span divided by two */
      bL = h.axisValue - br;  /* bin low */
      bH = h.axisValue + br;  /* bin high */
      
      return(
        '<b>' + bL + ' - ' + bH + '</b><br /><span style=\"color:' +
        h.color + ';\">●</span> ' + h.seriesName + 
        '<b style=\"padding-left: 2em;\">' + 
        bc + '</b><br /><span style=\"color:' +
        d.color + ';\">●</span> ' + d.seriesName + 
        '<b style=\"padding-left: 2em;\">' + 
        ds + '</b><br/>')
    }"))
}

下面是如何应用此格式的示例。(对绘图的调用来自echarts4r示例绘图。)

mtcars |>
  e_charts(elementId = 'chart') |>
  e_histogram(mpg, name = "histogram") |>
  e_density(mpg, areaStyle = list(opacity = .4),
            smooth = TRUE, name = "density", y_index = 1) |>
  e_tooltip(
    trigger = "axis", confine = T, 
    textStyles = list(overflow = "breakall", width = 50),
    formatter = ttFrm(nrow(mtcars)))     # <<---- I'm new!!

这是另一个例子,我把数据换成了iris数据集。

iris |>
  e_charts(elementId = 'chart') |>
  e_histogram(Sepal.Width, name = "histogram") |>
  e_density(Sepal.Width, areaStyle = list(opacity = .4),
            smooth = TRUE, name = "density", y_index = 1) |>
  e_tooltip(
    trigger = "axis", confine = T, digits = 3,
    textStyles = list(overflow = "breakall", width = 50),
    formatter = ttFrm(nrow(iris)))

相关问题