highcharter hcaes“group”使用,同时使用highchart2()

时间:2017-06-07 13:49:03

标签: r highcharts r-highcharter

我正在尝试使用highcharter包(> 50k行数据)在散点图中绘制大型数据集,经过一些阅读后我发现highchart2()函数包含了来自highcharts的boost模块,它可以改善性能a在绘制大量数据时很多。请看以下示例:

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")

我得到了一个非常快速的渲染图,但我不能让分组工作在每个点上区分“是”和“否”,所以所有点现在都是相同的颜色。

所以我的问题是,如何在保持将变量分配给hcaes()中的“group”参数的同时,如何有效地绘制具有高图的大型数据集?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

迷你免责声明:仅当hcaes对象为datadata.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