Javascript 悬停散点图时显示变量名称

Javascript 悬停散点图时显示变量名称,javascript,r,echarts,Javascript,R,Echarts,下面是一个用{echarts4r}绘制的绘图,它来自: 库(echarts4r) 图书馆(tibble) mtcars%>% 行名称到列(“模型”)%>% 电子海图(mpg)%>% e_y_轴(drat)%>% e_分散(drat,symbol_大小=15,bind=model,scale=NULL)%>% 工具提示(格式化程序=htmlwidgets::JS(“ 函数(参数){ 返回(“”+params.name+ “x轴:”+参数值[0]+ “y轴:”+参数值[1] )} ")) 如您所

下面是一个用
{echarts4r}
绘制的绘图,它来自:

库(echarts4r)
图书馆(tibble)
mtcars%>%
行名称到列(“模型”)%>%
电子海图(mpg)%>%
e_y_轴(drat)%>%
e_分散(drat,symbol_大小=15,bind=model,scale=NULL)%>%
工具提示(格式化程序=htmlwidgets::JS(“
函数(参数){
返回(“”+params.name+
“
x轴:”+参数值[0]+ “
y轴:”+参数值[1] )} "))
如您所见,将鼠标悬停在某个点上时,将显示汽车模型的名称和值。但是,我不知道如何以相同的方式显示变量名。我知道我可以手动将“x轴”和“y轴”替换为它们的名称,但我想自动完成

我对此进行了检查,但是使用
{a}
(例如)不起作用

有什么想法吗


编辑:我使用
echarts4r 0.3.3

请查找以下代码:

您需要使用params.seriesName来访问列名

    mtcars %>%   
  tibble::rownames_to_column("model") %>%  
  e_charts(wt) %>%  
  e_scatter(mpg, qsec, bind = model, scale = NULL) %>% 
  e_tooltip(formatter = htmlwidgets::JS(" 
    function(params){ 
      return('<strong>' + params.seriesName + 
              '</strong><br />wt: ' + params.value[0] +  
              '<br />mpg: ' + params.value[1] + '<br> qsec:' + params.value[2]   
              )} 
        ")) 
mtcars%>%
TIBLE::行名称到列(“模型”)%>%
e_图表(wt)%>%
e_散射(mpg、qsec、bind=model、scale=NULL)%>%
工具提示(格式化程序=htmlwidgets::JS(“
函数(参数){
返回(“”+params.seriesName+
“
wt:”+参数值[0]+ “
mpg:”+参数值[1]+”
qsec:“+参数值[2] )} "))
我试图了解我是否了解到您可能真正需要的东西。。。 我想你想要灵活命名的原因是让它有一个独立的函数,以便在你需要的时候调用你

这个怎么样?它使用了一种变通方法来避免使用名称(即向函数传递字符串而不是不带引号的名称)。但是,如果您需要使用名称,我们可以尝试其他方法

library(echarts4r)
library(tibble)


plot_escatter <- function(df, x_axis, y_axis, bind){
    
    df %>%
        e_charts_ (x_axis) %>%
        e_y_axis_ (y_axis) %>%
        e_scatter_(y_axis, symbol_size = 15, bind = bind, scale = NULL) %>%
        e_tooltip(formatter = htmlwidgets::JS(paste0("
              function(params){
                return('<strong>' + params.name + '</strong><br />", x_axis, ": ' + params.value[0] +  
                '<br />", y_axis, ": ' + params.value[1]
                )} 
              ")))
    
}


mtcars %>% 
    rownames_to_column("model") %>%  
    plot_escatter("mpg", "drat", "model")
库(echarts4r)
图书馆(tibble)
绘图组%
e_图表(x_轴)%>%
e_y_轴(y_轴)%>%
e_散射(y_轴,符号_大小=15,绑定=bind,缩放=NULL)%>%
工具提示(格式化程序=htmlwidgets::JS(粘贴0)
函数(参数){
返回(“”+params.name+”
“,x_轴,”:“+params.value[0]+ “
”,y_轴“:”+参数值[1] )} "))) } mtcars%>% 行名称到列(“模型”)%>% 绘图模式(“mpg”、“drat”、“模型”)
传递给e_工具提示的参数中不存在您要的东西。 您可以通过将
params
传递到
console.log
并在浏览器中检查此日志来访问它们:

mtcars %>%
  rownames_to_column("model") %>%  
  e_charts(mpg) %>%
  e_y_axis(drat) %>%
  e_scatter(drat, symbol_size = 15, bind = model, scale = NULL) %>%
  e_tooltip(formatter = htmlwidgets::JS("
              function(params){
              var obj_str = JSON.stringify(params);
              console.log(obj_str);
                return('<strong>' + params.name +  
              '</strong><br />' + params.seriesName + ': ' + params.value[0] +  
                '<br />mpg: ' + params.value[1]
                )} 
              "))

在这种情况下,下面@Edo的
paste0
方法似乎非常合理。

这不是我想要的,因为您只写了变量的名称,而不是
x轴
y轴
。我要寻找的是一种显示变量名称的方法,而不必指定它是
wt
还是else。我想知道是否存在诸如
params.name[1]
之类的东西来访问这些变量名称这几乎是正确的。我在一个闪亮的应用程序中使用这个绘图,用户可以在其中选择两个轴。这就是为什么我不能手动写入轴的名称(我不知道用户会选择什么变量)。我可以在我的应用程序中成功地使用
paste0()
,尽管我不需要创建自定义函数来实现这一点。它确实有用(所以我支持你的答案),我不知道为什么我以前没有想到它,但我正在寻找一个“更干净”的解决方案:只使用JS而不使用
paste0()
会更好。我明白你的意思。我以前从未见过那个包裹,所以我需要仔细研究一下,以便更好地帮助你。。如果我发现了什么,我会告诉你的。用户向图表提供了什么?字符串还是名称?使用字符串和
*.
函数对您合适吗?您想改进的只是JS部分吗?用户提供的输入是字符串。是的,我对函数和字符串的使用很在行,我只想改进工具提示中的JS部分。感谢您的帮助,因此函数
JS
只需获取所有输入,
将它们与
collapse=“\n”
一起粘贴,然后添加新类
JS\u EVAL
。只需阅读函数:
print(htmlwidgets::JS)
。因此,我相信使用
paste0
的解决方案是处理问题的正确方法。它确实有效,但我想知道是否有一种方法只使用JS。例如,在我文章中的代码中,我使用
params.name
params.value[1]
打印特定参数。我的问题是,是否存在这样的参数来打印两个轴的名称。
mtcars %>%
  rownames_to_column("model") %>%  
  e_charts(mpg) %>%
  e_y_axis(drat) %>%
  e_scatter(drat, symbol_size = 15, bind = model, scale = NULL) %>%
  e_tooltip(formatter = htmlwidgets::JS("
              function(params){
              var obj_str = JSON.stringify(params);
              console.log(obj_str);
                return('<strong>' + params.name +  
              '</strong><br />' + params.seriesName + ': ' + params.value[0] +  
                '<br />mpg: ' + params.value[1]
                )} 
              "))
{"componentType":"series",
  "componentSubType":"scatter",
  "componentIndex":0,
  "seriesType":"scatter",
  "seriesIndex":0,
  "seriesId":"\u0000drat\u00000",
  "seriesName":"drat",
  "name":"Ford Pantera L",
  "dataIndex":9,
  "data":{"value":[15.8,4.22],
  "name":"Ford Pantera L"},
  "value":[15.8,4.22],
  "color":"#c23531",
  "dimensionNames":["x","y"],
  "encode":{"x":[0],"y":[1]},
  "marker":"<span style=\"display:inline-block;
            margin-right:5px;
            border-radius:10px;
            width:10px;height:10px;
            background-color:#c23531;\"></span>",
  "$vars":["seriesName","name","value"]
}