Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Building plotly graph in for loop not displaying all series

Tags:

r

plotly

Creating a plot by adding one column at a time works just fine

exPlot <- plot_ly(data.table(matrix(1:9,ncol = 3)))
theCols <- c("V2","V3")
exPlot <- exPlot %>% add_lines(x = ~V1, y = ~get(theCols[1]), type = "scatter",mode = "lines")
exPlot <- exPlot %>% add_lines(x = ~V1, y = ~get(theCols[2]), type = "scatter",mode = "lines")
exPlot

but if I try to do the same thing in a for loop, it only displays the second trace, overwriting the first one.

exPlot <- plot_ly(data.table(matrix(1:9,ncol = 3)))
theCols <- c("V2","V3")
for(i in 1:2){
  exPlot <- exPlot %>% add_lines(x = ~V1, y = ~get(theCols[i]), type = "scatter",mode = "lines")
}
exPlot

Any way to get around this? I looked around a bit, and setting "evaluate = TRUE" used to be the answer, but that seems to have been deprecated.

like image 627
hedgedandlevered Avatar asked Apr 05 '17 16:04

hedgedandlevered


1 Answers

The reason beats me but you are asking for 'any way to get around this'.

Instead of passing the whole data.table at once, you could specify the required y-values in the loop and it should work.

df <- data.table(matrix(1:9,ncol = 3))
exPlot <- plot_ly(df[[1]])
theCols <- c("V2","V3")
for(i in 1:2){
  exPlot <- add_lines(exPlot,
                      y = df[[theCols[i]]],
                      type = "scatter",
                      mode = "lines")
}
exPlot
like image 160
Maximilian Peters Avatar answered Sep 28 '22 07:09

Maximilian Peters