lineas - Highcharts demasiado lento al trazar 4000 barras(rCharts)
highcharts statistics (1)
Estamos tratando de trazar alrededor de 4000 puntos de datos de la columna a1 como barras usando Highcharts. Los colores de las barras a1 se basan en los valores de otra columna llamada a3. Si a3 es negativo en una fila, la barra correspondiente alrededor de a1 debe ser roja, y a3 positiva debería dar color verde.
El problema es que el gráfico tarda alrededor de 25 segundos en generar, y solo lleva 20 segundos imprimir el gráfico. ¿Podría alguien ayudarnos a arreglar el código y hacerlo más rápido? Intentamos desactivar las animaciones y las sombras, pero eso no ayudó demasiado. Aquí está el código:
fun <- function(){
## Generate a random data set with roughly 4,000 lines
df <- as.data.frame(cbind(x = seq(1:3900),
a1 = rnorm(3900, 1000000, 2000000),
a2 = abs(rnorm(3900, 1000000, 2000000)),
a3 = rnorm(3900, 20000, 30000),
a4 = rnorm(3900, 1000, 500),
a5 = rnorm(3900, 0.01, 0.02)))
## Modify the data set to assign colors to each bar based on the values
## of a3. Green bars signify positive a3''s and red bars signify
## negative a3''s
df <- df %>%
mutate(a6 = cumsum(a3)) %>%
mutate(color = ifelse(a3 > 0,
"rgba(50,205,50,0.6)",
"rgba(223,83,83,0.6)")) %>%
mutate(y = a1,
a1 = comma_format()(round(a1, 0)),
a3 = comma_format()(round(a3, 0)),
a4 = comma_format()(round(a4, 4)),
a5 = comma_format()(round(a5, 0)),
a6 = comma_format()(round(a6, 0))
)
## Store the data in a list so that it is readable by Highcharts
input <- list()
input <- lapply(unname(split(df, seq(nrow(df)))), as.list)
## Draw the graph with Highcharts
a <- rCharts::Highcharts$new()
a$series(data = input,
name = "a1 values",
type = "column")
a$plotOptions(series = list(turboThreshold = 4000))
a$chart(zoomType = "xy", animation = FALSE)
a$addParams(width = 1000, height = 400, title = list(text = "The Slow Chart"))
a$tooltip(formatter = "#! function()
{return ''Date:<b> '' + this.point.x +
''</b> <br/>a1 values:<b> '' + this.point.a1 +
''</b> <br/>a3 values:<b> '' + this.point.a2 +
''</b> <br/>a4 values:<b> '' + this.point.a3 +
''</b> <br/>a5 values:<b> '' + this.point.a5 +
''</b> <br/>a6 values:<b> '' + this.point.a6} !#")
print(a)
}
¡Cualquier ayuda es apreciada!
Antes que nada, muestre qué paquetes usa en su código (dplyr, escalas).
Hay un módulo de impulso para Highcharts. lamentablemente, rCharts no incluye ese módulo de manera predeterminada, por lo que debe agregarlo manualmente.
Por otra parte. Hay un nuevo contenedor para Highcharts llamado Highcharter que tiene una implementación de este módulo. Usarlo no toma más de 1 segundo para trazar las 3900 columnas.
highchart2() %>%
hc_title(text = "Not so slow chart ;)") %>%
hc_subtitle(text = "Thanks boost module") %>%
hc_chart(zoomType = "x", animation = FALSE, type = "column") %>%
hc_plotOptions(series = list(turboThreshold = 4000)) %>%
hc_add_serie(data = input)
Verifica la velocidad / aquí:
http://rpubs.com/jbkunst/highcharts-too-slow-when-plotting-4000-bars-rcharts