Детализация нескольких серий из разных групп - Highcharter (в R)

Я ищу способ перейти от разных групп к нескольким сериям с помощью Highcharter для R. По сути, я хотел бы воспроизвести этот пример в High Charts (из jsfiddle) - http://jsfiddle.net/wchmiel/v1o8dga9/3/

Вот код, который приближает меня к этому -

library(highcharter)
library(dplyr)
library(purrr)

df <- tibble(x = c(1, 2, 3, 2, 3, 4, 3, 5, 4), y = c(1, 2, 1, 3, 3, 2, 4, 6, 5), key = c(rep("A", 3), rep("B", 3), rep("C", 3)),
             drilldown = c(rep("a", 3), rep("b", 3), rep("c", 3)))

drill1 <- data.frame(
  x = c(1,2,3),
  y = c(3, 3, 1)
)
drill1 <- list_parse2(drill1)

drill2 <- data.frame(
  x = c(1,2,4),
  y = c(1, 5, 1)
)
drill2 <- list_parse2(drill2)

drill3 <- data.frame(
  x = c(1,2,4),
  y = c(4, 3, 1)
)
drill3 <- list_parse2(drill3)


hchart(df, "line", 
       hcaes(x = x, y = y, group = key),
       color = c("#A63A50", "#37123C", "#DDA77B"),
       drilldown = TRUE) %>% 
  hc_plotOptions(line = list(marker = list(enabled = FALSE), legendIndex = 1)) %>% 
  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(
        id = "a",
        data = drill1
      ),
      list(
        id = "b",
        data = drill2
      ),
      list(
        id = "c",
        data = drill3
      )
    )
  )

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

Важно, чтобы в развернутых диаграммах были кнопки для возврата к основной диаграмме (как в моем примере и в примере с jsfiddle). Кроме того, мне нужна возможность детализировать разные диаграммы из разных групп, а не только из одной группы.

Так что в основном мне нужен пример jsfiddle, воспроизведенный в highcharter. Я подозреваю, что решение связано с каким-то javascript.


person parma    schedule 08.09.2019    source источник


Ответы (1)


Вы можете переписать все из предоставленного jsFiddle в R с помощью функции JS ("...").

Вот пример:

library(highcharter)
library(dplyr)
library(purrr)

df <- tibble(x = c(1, 2, 3, 2, 3, 4, 3, 5, 4), y = c(1, 2, 1, 3, 3, 2, 4, 6, 5), key = c(rep("A", 3), rep("B", 3), rep("C", 3)),
             drilldown = c(rep("a", 3), rep("b", 3), rep("c", 3)))

drill1 <- data.frame(
  x = c(1,2,3),
  y = c(3, 3, 1)
)
drill1 <- list_parse2(drill1)

drill2 <- data.frame(
  x = c(1,2,4),
  y = c(1, 5, 1)
)
drill2 <- list_parse2(drill2)

drill3 <- data.frame(
  x = c(1,2,4),
  y = c(4, 3, 1)
)
drill3 <- list_parse2(drill3)


hchart(df, "line", 
       hcaes(x = x, y = y, group = key),
       color = c("#A63A50", "#37123C", "#DDA77B"),
       drilldown = TRUE) %>% 
  hc_chart(events = list(drilldown = JS("function(e) {
            e.preventDefault()
            var chart = this,
              series = [{
                data: [5, 5, 5, 3, 2]
              }, {
                data: [3, 3, 7, 3, 3]
              }];

            chart.addSingleSeriesAsDrilldown(e.point, series[0]);
            chart.addSingleSeriesAsDrilldown(e.point, series[1]);
            chart.applyDrilldown();
        }"))) %>% 
  hc_plotOptions(line = list(marker = list(enabled = FALSE), legendIndex = 1)) %>% 
  hc_drilldown(
    allowPointDrilldown = TRUE,
    series = list(
      list(
        id = "a",
        data = drill1
      ),
      list(
        id = "b",
        data = drill2
      ),
      list(
        id = "c",
        data = drill3
      )
    )
  )

И упрощенный пример jsFiddle: https://jsfiddle.net/BlackLabel/nx6czgwf

Теперь вам просто нужно подготовить данные и использовать код из jsFiddle.

person raf18seb    schedule 09.09.2019
comment
Это прекрасно работает. Спасибо за вашу помощь. Хитрость заключается в том, чтобы скопировать javascript для всего, что находится после «function (e)», и вставить его в events = list (Drilldown = JS ([вставить сюда])), как вы это сделали в этом примере. - person parma; 10.09.2019