2015-08-19 6 views
0

У меня есть dataframe с 4 столбцами. Я использую два столбца (x, y) для построения для x и y. Третий столбец (группа) используется для группировки. И мой четвертый столбец (cat) не используется, но я бы хотел, чтобы он отображался в подсказке.rCharts Highcharts Добавить дополнительные данные в tooltip

Вот мой dataframe.

library(rCharts) 
df <- data.frame(x=c(1:12,1:12), 
       y=c(0.6, 0.5, 0.3, 0.3, 0.8, 0.99, 0.6, 0.5, 0.4, 0.7, 0.6, 0.8, 
         0.4, 0.5, 0.7, 0.7, 0.2, 0.01, 0.4, 0.5, 0.6, 0.3, 0.4, 0.2), 
       group=c(rep("group1",12),rep("group2",12))) 

df$cat <- c(rep(c(rep("A",6),rep("B",6)),2)) 

Я использую hPlot функцию от rCharts создать Highcharts бар колонки участок.

p <- hPlot(x = "x", y = "y", data = df, type = c("column"),group="group") 
p$addParams(dom = "plot1") 
p$tooltip(borderWidth=0, 
      headerFormat="<span style='font-size: 10px'><b>{point.key}</b></span><br/>", 
      followPointer=TRUE, 
      followTouchMove=TRUE, 
      shared = FALSE) 

Here, он объясняет, чтобы добавить дополнительные данные в серии. Кажется прямо, но я не смог заставить его работать. Я пробовал всевозможные вещи, используя toJSON от jsonlite и toJSONArray от RJSONIO. Но он отказывается работать. Это первая часть проблемы.

Вторая часть - фактически отображать всплывающую подсказку после ввода данных с использованием форматирования. highcharts reference предлагает:

tooltip: { 
     formatter: function() { 
      return 'The value for <b>' + this.x + 
       '</b> is <b>' + this.y + '</b>'; 
     } 
    } 

Как один сделать это в R?

#idea1. maybe like this? 
p$tooltip(formatter=function() { 
    return 'The value for <b>' + this.x + 
    '</b> is <b>' + this.y + '</b>'; 
}) 

#idea2. or like this? 
p$tooltip(formatter="function() { 
    return 'The value for <b>' + this.x + 
    '</b> is <b>' + this.y + '</b>'; 
}") 

#idea3. or perhaps like this? 
p$tooltip(formatter=function() { 
    "return 'The value for <b>' + this.x + 
    '</b> is <b>' + this.y + '</b>';" 
}) 

В любом случае, ни одна из них не работает. Итак, если кто-нибудь знает, я бы хотел знать. Большое спасибо.

PS: Тот же вопрос был отправлен someone else before, но у него нет полного ответа.

+0

https://github.com/ramnathv/rCharts/issues/219 – rmf

ответ

2

, Привет, вы должны поставить функцию форматтера между "# ... #!", Как это:

p$tooltip(formatter="#!function() { 
    return 'The value for <b>' + this.x + 
    '</b> is <b>' + this.y + '</b>'; 
}!#") 

@Ramnath вероятно ответил где-то подобный вопрос.

0

Таким образом, оказывается, что hPlot() не может быть использован для отображения дополнительных переменных во всплывающих подсказках. См рабочий пример ниже:

library(rCharts) 

d <- data.frame(x=c(1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10), 
       y=c(0.7,0.8,0.7,0.3,0.5,0.2,0.4,0.4,0.5,0.5, 
        0.3,0.2,0.3,0.7,0.5,0.8,0.6,0.6,0.5,0.7), 
       type=factor(c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B")), 
       pop=c("Group 1","Group 1","Group 1","Group 1","Group 1","Group 1","Group 2","Group 2","Group 2","Group 2", 
         "Group 1","Group 1","Group 1","Group 1","Group 1","Group 1","Group 2","Group 2","Group 2","Group 2")) 

hp <- hPlot(x = "x", y = "y", data = d, type = c("column"), group = "type") 
hp$plotOptions(column = list(stacking = "normal", pointPadding = 0, groupPadding = 0, borderWidth = 0)) 
hp$tooltip(borderWidth=0, followPointer=TRUE, followTouchMove=TRUE, shared = FALSE, 
      formatter = "#! function(){return this.point.x + '<br>' + this.point.pop + '<br>' + this.point.type + ': ' + this.point.y;} !#") 
hp 

enter image description here

В приведенном выше примере с использованием hPlot(), дополнительная переменная type не может быть показан в подсказке, так как массив не назван.

В приведенном ниже примере, используя одни и те же данные, вместо использования hPlot(), участок строится вручную. Здесь всплывающие подсказки работают, потому что массив назван. Начальная линия hm$series.... имеет names=T.

hm <- rCharts:::Highcharts$new() 
dlev <- levels(d$type) 
for(i in 1:length(dlev)) 
{ 
    hm$series(data = toJSONArray2(d[d$type==dlev[i],,drop=F], json = F,names=T), name = dlev[i],type = c("column"), marker = list(radius = 3)) 
} 
hm$plotOptions(column = list(stacking = "normal", pointPadding = 0, groupPadding = 0, borderWidth = 0)) 
hm$tooltip(borderWidth=0, followPointer=TRUE, followTouchMove=TRUE, shared = FALSE, 
      formatter = "#! function(){return this.point.x + '<br>' + this.point.pop + '<br>'+ this.point.type + ': ' + this.point.y;} !#") 
hm 

enter image description here