Использование группы highcharter hcaes при построении больших объемов данных с помощью функции highchart2 ()

Я пытаюсь построить большие наборы данных на диаграммах рассеяния, используя пакет highcharter (> 50 тыс. Строк данных), после некоторого чтения я обнаружил, что функция highchart2() включает модуль повышения из highcharts, который должен значительно улучшить производительность при построении больших объемов данных. Возьмем следующий пример:

library(highcharter) # I'm using the latest version from github (0.5.0.9999)

x <- data.frame(a = rnorm(5000),
                b = rnorm(5000),
                cat = c(rep("Yes", 2500), rep("No",2500)))



highchart() %>%
  hc_add_series(data = x, type = "scatter", hcaes(x=a, y=b, group=cat))

Это должно правильно создать диаграмму рассеяния, но уже с некоторыми проблемами производительности из-за объема данных. Вот почему я переключился на highchart2(), но, к моему удивлению, график не показывает никаких точек данных при попытке:

highchart2() %>%
  hc_add_series(data = x, type = "scatter", hcaes(x=a, y=b, group=cat))

И после еще нескольких поисков и прочтения я обнаружил, что при использовании list_parse2() график рендерится намного быстрее, поэтому я попробовал следующее:

highchart2() %>%
  hc_add_series(data = list_parse2(x), type = "scatter", hcaes(x=a, y=b, group=cat))

И, конечно, это не работает, потому что я изменил структуру входных данных и удалил имена переменных, которые давал hcaes(). Затем, когда я попробовал это:

highchart2() %>%
  hc_add_series(data = list_parse2(x), type = "scatter")

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

Итак, мой вопрос: как я могу эффективно строить большие наборы данных с помощью highcharter, сохраняя при этом возможность назначать переменную параметру "group" в hcaes()?

Заранее спасибо за помощь.


person ANieder    schedule 07.06.2017    source источник


Ответы (1)


Небольшой отказ от ответственности: hcaes работает, только если объект data является data.frame.

Теперь вы можете использовать dplyr, чтобы получить фрейм данных серии с помощью функции group_by, а затем использовать вспомогательную функцию hc_add_series_list для одновременного добавления нескольких серий.

library(highcharter)  # I'm using the latest version from github (0.5.0.9999)

x <- data.frame(a = rnorm(5000), b = rnorm(5000), cat = c(rep("Yes", 2500), 
  rep("No", 2500)))

library(dplyr)

xseries <- x %>% 
  # use `name` to name  series according the value of `cat` avariable
  group_by(name = cat) %>% 
  do(data = list_parse2(.)) %>%
  # add type of series
  mutate(type = "scatter")

# A data frame of series
xseries
#> Source: local data frame [2 x 3]
#> Groups: <by row>
#> 
#> # A tibble: 2 x 3
#>     name           data    type
#>   <fctr>         <list>   <chr>
#> 1     No <list [2,500]> scatter
#> 2    Yes <list [2,500]> scatter

И наконец:

highchart2() %>% 
  hc_add_series_list(xseries)

hc_add_series_list

person jbkunst    schedule 07.06.2017
comment
Спасибо!! работает как шарм. Отличный пакет, кстати! Спасибо за хорошую работу - person ANieder; 07.06.2017