当用户将鼠标悬停在树形图中的正方形上并且我使用this文章作为基础时,我需要显示一个自定义工具提示。
必须使用gvisTreeMap()
函数使用R和googleVis库构建树图。根据提到的文章,我在函数的选项列表中创建了一个参数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>';
}"
)))
我的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>'; }";
在这里,
options["generateTooltip"]
是使用导致错误的字符串初始化的(我希望该字符串将被自动识别为函数定义)。所以,我想知道有什么方法可以将函数定义从R环境传递到generateTooltip
属性吗? 最佳答案
我知道这是一年多以前的帖子。.但是当我今天处理完全相同的问题时,我在其他任何地方都找不到具体的解决方案,所以我想我会分享我的解决方案,希望有人能找到这在将来很有用。
我实际上以您的帖子Mstislav为起点,但是在尝试在选项列表中分配JavaScript函数时遇到了同样的问题。经过几次尝试删除引号的尝试失败(我能够使用as.symbol()和unquote()删除引号,但将结果传递给gvisTreeMap后收到错误消息),我意识到问题的症结所在就是说Google Charts documentation假定您实际上是用JavaScript编写代码,而实际上是将参数输入R函数,然后将它们转换为JavaScript。
由于似乎没有简单的方法可以将JavaScript函数传递给gvisTreeMap函数调用,我想我会尝试确定在googleVis源代码中选项列表被翻译成JavaScript的位置,然后根据该文章直接修改Javascript 。
下载googleVis source code并从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)
)
我修改了两个部分(包装在// **开始/结束部分** //中)。第一部分定义showFullTooltip函数,第二部分将generateTooltip选项添加到选项列表。这对我来说就像是一种魅力。 Google图表文章对描述如何修改JavaScript代码非常有帮助。诀窍只是弄清楚在哪里可以在googleVis程序中找到那段代码。
要运行此代码,我发现您不必“覆盖” googleVis程序包。您只需将修改后的gvis.R和未修改的gvisTreeMap.R的副本保存在项目文件夹中(或您可以访问的任何位置)。然后,在程序顶部,加载googleVis库(这样就拥有了所有依赖项),然后按顺序获取gvis.R和gvisTreeMap.R的版本。修改后的googleVis函数版本将覆盖您从googleVis库加载的版本。