给 tooltip 饼图添加额外的变量 echarts4r

Add extra variables to tooltip pie chart echarts4r

我正在使用 echarts4r 创建圆环图。现在我正在尝试添加自定义工具提示,并且我能够复制此处给出的示例 and here 。但是,我真的不明白这是如何扩展到饼图的。我想要一个带有工具提示的饼图,显示总百分比和相对百分比

library(tidyverse)
library(echarts4r)

My_df <- data.frame(n = c(1, 4, 10), 
                    x = c("A", "B", " C")) %>%
  mutate(percent = round(n/sum(n), 2) )

My_df %>%
  e_charts(x)  %>% 
  e_pie(n, radius = c("50%", "70%")) %>%
  e_tooltip()

这是我迄今为止最好的一次拍摄

My_df %>%
  e_charts(x)  %>% 
  e_pie(n, radius = c("50%", "70%")) %>%
  e_tooltip(formatter = htmlwidgets::JS("
                                        function(params){
                                        return('<strong>' + params.name + 
                                        '</strong><br />total: ' + params.value + 
                                        '<br />percent: ' +  params.value[1])   }  "))

在散点图示例中,额外的值是使用 bind = 附加的,但这不适用于饼图。

这可能比@WeihuangWong 在

中的回答更骇人听闻

如果您只想显示百分比,那么@norie 的答案就可以了。如果有人想在工具提示中显示 echarts 尚未计算的值,我的回答可能仍然有用。

  1. 按照该答案,您可以向 df 添加一个变量,其中包含系列的名称以及您希望在工具提示中显示的其他值,我将其称为 name 以供参考

  2. e_charts中使用name而不是x

  3. e_tooltip 中将 name 拆分成多个部分并设置工具提示

  4. 但是,使用 name 有副作用,现在名称和百分比值都显示为标签和图例。为了摆脱这种情况,我们还必须为标签和图例添加格式化程序。

library(tidyverse)
library(echarts4r)

My_df <- data.frame(n = c(1, 4, 10), 
                    x = c("A", "B", " C")) %>%
  mutate(percent = round(n/sum(n), 2),
         name = paste(x, percent, sep = ","))

My_df %>%
  e_charts(name)  %>% 
  e_pie(n, radius = c("50%", "70%"), label = list(
    formatter = htmlwidgets::JS(
    "function(params){
      var vals = params.name.split(',')
      return(vals[0])}"))
  ) %>%
  e_legend(formatter = htmlwidgets::JS(
      "function(name){
      var vals = name.split(',')
      return(vals[0])}")) %>% 
  e_tooltip(formatter = htmlwidgets::JS("
                                        function(params){
                                        var vals = params.name.split(',')
                                        
                                        return('<strong>' + vals[0] + 
                                        '</strong><br />total: ' + params.value + 
                                        '<br />percent: ' +  vals[1])   }  "))

你不能用params.percent吗?

My_df %>%
  e_charts(x)  %>% 
  e_pie(n, radius = c("50%", "70%")) %>%
  e_tooltip(formatter = htmlwidgets::JS("
                                        function(params){
                                        return('<strong>' + params.name + 
                                        '</strong><br />total: ' + params.value + 
                                        '<br />percent: ' +  params.percent)  +'%' }  "))

您还可以使用 Javascript template literals.

稍微整理一下
My_df %>%
  e_charts(x)  %>% 
  e_pie(n, radius = c("50%", "70%")) %>%
  e_tooltip(formatter = htmlwidgets::JS("
                                        function(params)
                                        {
                                            return `<strong>${params.name}</strong>
                                                    <br/>Total: ${params.value}
                                                    <br/>Percent: ${params.percent}%`
                                        }  "))