6

我想通过 rCharts 为标准的 Highcharts 工具提示添加一些额外的值。示例代码:

require(rCharts)
df <- data.frame(x = c(1:5), y = c(5:1), 
             z = c("A", "B", "C", "D", "E"),
             name = c("K", "L", "M", "N", "O"))
h1 <- hPlot(x = "x", y = "y", data = df, type = "scatter", group = "z")

这会生成一个带有 x 和 y 值的工具提示。并将系列名称 z 作为标题。现在我还希望将名称值添加到工具提示中。但是我不知道这是如何完成的。

4

2 回答 2

3

rCharts是一个很棒的包。但它仍然没有很好的记录(也许我错过了这一点)。我认为您需要为tooltip属性重新定义新的 JS 函数。任何 JS 文字都需要包裹在 #! 和 !# 。这是一个开始,但它不像我想象的那样工作(我认为是一个好的开始):

h1$tooltip( formatter = "#! function() { return 'x: '     + this.point.x + 
                                                'y: '    + this.point.y  + 
                                                'name: '  + this.point.group; } !#")
于 2013-08-06T18:30:19.537 回答
1

几年后,我有了答案。

即使使用简单的自定义格式化程序函数,这些包装函数hPlot()似乎也不支持额外的工具提示变量。根据问题中的数据集,请参阅下面的工作示例。

require(rCharts)
# create data frame
df <- data.frame(x = c(1:5), y = c(5:1), 
                 z = c("A", "B", "C", "D", "E"),
                 name = c("K", "L", "M", "N", "O"))

# Plot using hPlot() approach
h1 <- hPlot(x = "x", y = "y", data = df, type = "scatter", group = "z")
h1$tooltip(borderWidth=0, followPointer=TRUE, followTouchMove=TRUE, shared = FALSE,
           formatter = "#! function(){return 'X: ' + this.point.x + '<br>Y: ' + this.point.y + '<br>Z: ' + this.point.z + '<br>Name: ' + this.point.name;} !#")
h1

hplot-rcharts

工具提示在上面的示例中不起作用,因为数组中的变量没有命名。见str(h1)

# Plot using manual build
h1 <- rCharts:::Highcharts$new()
dlev <- levels(factor(as.character(df$z)))
for(i in 1:length(dlev))
{
  h1$series(data = toJSONArray2(df[df$z==dlev[i],,drop=F], json = F,names=T), name = dlev[i],type = c("scatter"), marker = list(radius = 3))
}
h1$tooltip(borderWidth=0, followPointer=TRUE, followTouchMove=TRUE, shared = FALSE,
           formatter = "#! function(){return 'X: ' + this.point.x + '<br>Y: ' + this.point.y + '<br>Z: ' + this.point.z + '<br>Name: ' + this.point.name;} !#")
h1

手动构建 rcharts

这是有效的,因为数组变量names=T在开头的行中使用命名h1$series...。见str(h1)

这种解决了工具提示问题,但命名数组可能还有其他问题。例如,它破坏了闪亮应用环境中的东西。hPlot()不使用命名数组一定是有原因的。

于 2016-01-07T10:45:52.717 回答