Javascript 使用R和googleVis自定义树形图中的工具提示

Javascript 使用R和googleVis自定义树形图中的工具提示,javascript,r,google-visualization,treemap,googlevis,Javascript,R,Google Visualization,Treemap,Googlevis,当用户将鼠标悬停在树状图中的正方形上时,我需要显示一个自定义工具提示,并且我使用文章作为基础 树映射必须使用gvisTreeMap()函数使用R和googleVis库构建。根据上面提到的文章,我在函数的选项列表中创建了一个参数generateTooltip,并为其分配了一个用于创建匿名函数的代码。以下是gvisTreeMap()调用的完整代码: plot(gvisTreeMap(Data, idvar="Name.of.the.Company", parentvar="Name.

当用户将鼠标悬停在树状图中的正方形上时,我需要显示一个自定义工具提示,并且我使用文章作为基础

树映射必须使用
gvisTreeMap()
函数使用RgoogleVis库构建。根据上面提到的文章,我在函数的选项列表中创建了一个参数
generateTooltip
,并为其分配了一个用于创建匿名函数的代码。以下是
gvisTreeMap()
调用的完整代码:

plot(gvisTreeMap(Data,
    idvar="Name.of.the.Company",
    parentvar="Name.of.the.Parent",
    sizevar="Loan.Size..INR.in.million.",
    options=list(width='*', 
        height=600, 
        minColorValue=0, 
        maxColorValue=0, 
        generateTooltip = "function(row, size, value) { 
                              return '<div style=\"background:#fd9; padding:10px; border-style:solid\">' + 'Some text' + '</div>'; 
                           }"
)))
绘图(gvisTreeMap)(数据、,
idvar=“公司名称”,
parentvar=“Name.of.the.Parent”,
sizevar=“贷款规模……百万印度卢比。”,
选项=列表(宽度=“*”,
高度=600,
minColorValue=0,
maxColorValue=0,
generateTooltip=“函数(行、大小、值){
返回“+”一些文本“+”;
}"
)))
在我的HTML页面中生成的JS代码如下所示:

// jsDrawChart
...
var options = {};
options["height"] = 600;
options["minColorValue"] = 0;
options["maxColorValue"] = 0;
options["generateTooltip"] = "function(row, size, value) { return '<div style=\"background:#fd9; padding:10px; border-style:solid\">' + 'Some text' + '</div>'; }";
//jsDrawChart
...
var选项={};
选项[“高度”]=600;
选项[“minColorValue”]=0;
选项[“maxColorValue”]=0;
选项[“generateTooltip”]=“函数(行、大小、值){返回“”+”一些文本“+”;}”;

这里的
options[“generateTooltip”]
是用一个导致错误的字符串初始化的(我希望该字符串会自动识别为函数定义)。因此,我想知道有没有办法将函数定义从R环境传递到
generateTooltip
属性?

我知道这是一年前的一篇文章。。但是,当我今天处理完全相同的问题时,我在其他任何地方都找不到具体的解决方案,所以我想我会分享我的解决方案,希望将来有人会发现这很有用

实际上,我使用了您的帖子Mstislav作为起点,但在尝试在选项列表中分配JavaScript函数时遇到了同样的问题。在几次删除引号的尝试失败后(我能够用as.symbol()和unquote()删除引号,但在将结果传递到gvisTreeMap后收到错误消息),我意识到问题的症结在于Google图表假定您直接用JavaScript编写代码,实际上,您正在将参数输入到R函数中,然后R函数将它们转换为JavaScript

由于似乎没有简单的方法将JavaScript函数传递到gvisTreeMap函数调用中,因此我想我应该尝试在googleVis源代码中确定将选项列表转换为JavaScript的位置,然后根据文章直接修改JavaScript

在下载googleVis并从gvisTreeMap函数(在gvisTreeMap.R中)进行跟踪后,我在gvis.R中找到了需要修改的代码片段:

jsDrawChart <- '
// jsDrawChart

// ** begin modified portion **//
function showFullTooltip(row, size, value) {
return \'<div style="background:#fd9; padding:10px; border-style:solid">\' +
\'Group: \' + row + \'<br>\' +
\'Headcount: \' + size + \'<br>\' +
\'Turnover Rate: \' + value + \' </div>\';
}
// ** end modified portion **//

function drawChart%s() {
var data = gvisData%s();
var options = {};
%s
// ** begin modified portion **//
options["generateTooltip"] = showFullTooltip;
// ** end modified portion **//
%s
%s
%s
}
%s  
'
jsDrawChart <- sprintf(jsDrawChart, chartid,  chartid,
                       paste(gvisOptions(options), collapse="\n"),
                       jsFormats,
                       gvisNewChart(chartid,type,options),
                       gvisListener(chartid, type, options),
                       gvisEditor(chartid,type,options)
)

jsDrawChart我知道这是一篇一年多前的帖子。。但是,当我今天处理完全相同的问题时,我在其他任何地方都找不到具体的解决方案,所以我想我会分享我的解决方案,希望将来有人会发现这很有用

实际上,我使用了您的帖子Mstislav作为起点,但在尝试在选项列表中分配JavaScript函数时遇到了同样的问题。在几次删除引号的尝试失败后(我能够用as.symbol()和unquote()删除引号,但在将结果传递到gvisTreeMap后收到错误消息),我意识到问题的症结在于Google图表假定您直接用JavaScript编写代码,实际上,您正在将参数输入到R函数中,然后R函数将它们转换为JavaScript

由于似乎没有简单的方法将JavaScript函数传递到gvisTreeMap函数调用中,因此我想我应该尝试在googleVis源代码中确定将选项列表转换为JavaScript的位置,然后根据文章直接修改JavaScript

在下载googleVis并从gvisTreeMap函数(在gvisTreeMap.R中)进行跟踪后,我在gvis.R中找到了需要修改的代码片段:

jsDrawChart <- '
// jsDrawChart

// ** begin modified portion **//
function showFullTooltip(row, size, value) {
return \'<div style="background:#fd9; padding:10px; border-style:solid">\' +
\'Group: \' + row + \'<br>\' +
\'Headcount: \' + size + \'<br>\' +
\'Turnover Rate: \' + value + \' </div>\';
}
// ** end modified portion **//

function drawChart%s() {
var data = gvisData%s();
var options = {};
%s
// ** begin modified portion **//
options["generateTooltip"] = showFullTooltip;
// ** end modified portion **//
%s
%s
%s
}
%s  
'
jsDrawChart <- sprintf(jsDrawChart, chartid,  chartid,
                       paste(gvisOptions(options), collapse="\n"),
                       jsFormats,
                       gvisNewChart(chartid,type,options),
                       gvisListener(chartid, type, options),
                       gvisEditor(chartid,type,options)
)

jsDrawChart我也遇到了同样的问题,而且我的答案让我有了一部分解决方法,除了在我的例子中,我想将默认的工具提示(仅包含矩形的名称-在绘图中有一些小区域时非常有用)与
showFullTooltip
中的额外细节(即值和大小)结合起来。要做到这一点,您需要(大体上)遵循以下建议的相同步骤,即:

  • 下载googleVis
  • 提取并保存
    gvis.R
    gvisTreeMap.R
    文件
  • 仅编辑gvis.R
(1),并保存它
  • 加载您可能需要的任何其他R软件包,包括
    googleVis
    (2)
  • 只有这样,才能将自定义的
    gvis.R
    gvisTreeMap.R
    资源化到主脚本中(按顺序)

  • 现在,与上述方法有一些偏差是必要的,我在两个制动器之间标记了这些偏差:

    (1)
    gvis.R
    中,由于一些范围问题,您需要小心放置函数
    showFullTooltip
    。更好的位置是
    gvisNewChart
    的声明中。一旦编辑,它将如下所示。另请注意,
    from的解决方案被
    数据取代。getValue(行,0)
    ,也称为矩形的标签:

    gvisNewChart <- function(chartid,type,options){
    
      ret <- ""
      if(is.null(options$gvis$gvis.editor)){
        jsnewchart <- "
        var chart = new google.visualization.%s(
        document.getElementById(\'%s\')
        );
    
        // ** begin modified portion **//
        function showFullTooltip(row, size, value) {
        return \'<div style=\"background:#fd9; padding:10px; border-style:solid\">\' +
        \'Name: \' + data.getValue(row, 0) + \'<br>\' +
        \'Average: \' + size + \'<br>\' +
        \'Normalised: \' + value + \' </div>\';
        }
        // ** end modified portion **//
    
        chart.draw(data,options);"
        ret <- sprintf(jsnewchart,type,chartid)  
    
      } else {
        jsnewchart <- "
        chart%s = new google.visualization.ChartWrapper({
        dataTable: data,       
        chartType: '%s',
        containerId: '%s',
        options: options
        });
        chart%s.draw();
        "
        ret <- sprintf(jsnewchart,chartid,type,chartid,chartid)
      }
      ret
      } 
    
    应该只生成自己的详细工具提示,而不指定此行为


    我很幸运,周围有很多伟大的人来帮助我,因为我无法管理自己。所以,谢谢你和@RossAnderson

    我也遇到了同样的问题,我的答案让我有了一部分的进步,除了我的情况,我