R HIGHCHARTER - Как отображать дополнительные значения ряда при наведении курсора на highchart?

Я хочу отображать дополнительную серию данных при наведении курсора на высокие диаграммы, которые я использую на своей гибкой панели управления. Я понимаю, что это можно сделать с помощью функции «форматирования» highcharts. Мне удалось сохранить дополнительную серию в случайной переменной в моих данных серии и вызвать ее с помощью функции форматирования, но я получаю полный список для каждой полосы на моем графике высоких диаграмм. Мне нужны индивидуальные значения для каждой точки.

Вот код:

highchart() %>% 
  hc_chart(type = "bar") %>% 
  hc_title(text = "Bottom Five Suppliers (Overall)") %>% 
  hc_xAxis(categories = suppliers$Supplier[20:24], tickInterval = 1) %>%
    hc_yAxis(tickInterval = 1) %>% hc_add_series(data = suppliers$x[20:24],
            name = "Overall Supplier Score (Weighted)", resp = suppliers$respondents[20:24]) %>% 
hc_tooltip(valueDecimals = 2, useHTML = TRUE, formatter = JS("function()
{return this.series.options.resp;}")) 
%>% hc_exporting(enabled = TRUE) %>% hc_plotOptions(
series = list(
  boderWidth = 0,
  dataLabels = list(enabled = TRUE)
))

Это результат: изображение] (http://imgur.com/a/rgcJm) [! [Highchart для дополнительных  серия

Как видите, данные, появляющиеся при наведении курсора на диаграмму, отличаются от осей x или y. Однако он отображает полные данные для всех 5 столбцов, а не отображает одно значение для каждого столбца.

Я знаю, что мне нужно написать функцию JavaScript, чтобы сопоставить значения с остальной частью фрейма данных, но я не уверен, как это сделать (к сожалению, у меня нет большого опыта или знаний JS).

Если я использую серию, используемую по оси x или y, тогда она работает нормально (с использованием this.x или this.y), но использование дополнительной серии, хранящейся в случайной переменной, не работает без this.series.options.seriesname и затем он также возвращает всю серию.

ИЗМЕНИТЬ

Вот код для воспроизведения этого примера:

library (highcharter)
library (dplyr)
Suppliers= data.frame(Supplier = c('one','two','three','four','five'),
Value = c(1,2,3,4,5), respondents= c(5,1,4,12,5), 
Category = c('cat1','cat2','cat3','cat4','cat5'))

highchart() %>% 
hc_chart(type = "bar") %>% 
hc_title(text = "Bottom Five Suppliers (Overall)") %>% 
hc_xAxis(categories = Suppliers$Supplier, tickInterval = 1) %>%
hc_yAxis(tickInterval = 1) %>% hc_add_series(data = Suppliers$Value,
        name = "Overall Supplier Score (Weighted)", resp = Suppliers$respondents) %>% 
hc_tooltip(valueDecimals = 2, useHTML = TRUE, formatter = JS("function()
{return this.series.options.resp;}")) 
%>% hc_plotOptions(
series = list(
  boderWidth = 0,
  dataLabels = list(enabled = TRUE)
))

Когда вы наводите курсор на созданную диаграмму высоких значений, она показывает полную серию респондентов вместо отдельных значений.


person NinjaElvis    schedule 03.12.2016    source источник
comment
Если вы сможете создать воспроизводимый пример, вам будет легче помочь.   -  person jbkunst    schedule 03.12.2016
comment
@jbkunst Спасибо за ответ! Я обновил вопрос, чтобы включить воспроизводимый пример.   -  person NinjaElvis    schedule 03.12.2016


Ответы (1)


Ладно, я попробовал что-то простое, и, похоже, это сработало. Я просто добавил точки оси x в качестве индекса к серии, которую я вызываю.

    library (highcharter)
    library (dplyr)
    Suppliers= data.frame(Supplier = c('one','two','three','four','five'),
    Value = c(1,2,3,4,5), respondents= c(5,1,4,12,5), 
    Category = c('cat1','cat2','cat3','cat4','cat5'))

     highchart() %>% 
     hc_chart(type = "bar") %>% 
     hc_title(text = "Bottom Five Suppliers (Overall)") %>% 
     hc_xAxis(categories = Suppliers$Supplier, tickInterval = 1) %>%
     hc_yAxis(tickInterval = 1) %>% hc_add_series(data = Suppliers$Value,
    name = "Overall Supplier Score (Weighted)", resp = Suppliers$respondents) %>% 
     hc_tooltip(valueDecimals = 2, useHTML = TRUE, formatter = JS("function()
      {return this.series.options.resp[this.point.x];}")) 
      %>% hc_plotOptions(
      series = list(
      boderWidth = 0,
      dataLabels = list(enabled = TRUE)
    ))
person NinjaElvis    schedule 03.12.2016