add_trace in Plotly in a loop [duplicate]

强颜欢笑 提交于 2021-02-16 13:25:11

问题


I want to plot multiple traces in a loop without overwriting all previous traces.

In this post from 2015, a solution to adding traces within a loop is presented, by setting evaluate = TRUE in the plot_ly or add_trace functions. However, as of 2017 in the newer version of plot_ly, evaluate isn't an attribute.

'scatter3d' objects don't have these attributes: 'evaluate'

This question, and this question also fail to answer the problem. This post acknowledges that evaluate = TRUE isn't doesn't work with new plotly, but doesn't give a solution. What is the new solution to this problem?


My data for copy/paste:

structure(list(x_1 = c(74.651438, 75.31493, 76.736865, 77.858125, 
79.347856, 80.302483), y_1 = c(249.063605, 247.149121, 245.461889, 
243.811041, 242.382685, 240.300034), z_1 = c(4.373868, 3.653744, 
4.101455, 4.134471, 4.225507, 4.890157), x_2 = c(85.468712, 86.637469, 
87.993127, 87.907308, 88.748766, 89.680155), y_2 = c(249.063405, 
247.145423, 245.46148, 244.949469, 244.005001, 242.917665), z_2 = c(4.56633, 
4.059976, 3.842906, 4.019021, 4.316799, 4.378894), x_3 = c(101.720648, 
101.70598, 102.022836, 102.166059, 102.242424, 102.317043), y_3 = c(249.660075, 
249.562464, 249.771452, 249.619983, 249.39349, 249.444531), z_3 = c(3.080686, 
3.003508, 2.774651, 2.291644, 2.239727, 1.932501)), .Names = c("x_1", 
"y_1", "z_1", "x_2", "y_2", "z_2", "x_3", "y_3", "z_3"), row.names = c(NA, 
6L), class = "data.frame")

My code:


library(plotly)
p <- plot_ly(temp, type = 'scatter3d', mode = 'lines', width = 1)
for(i in 1:3){
  x = paste0("x_",i)
  y = paste0("y_",i)
  z = paste0("z_",i)
  p <- add_trace(p, x = ~get(x), y = ~get(y), z = ~get(z))
}

p

回答1:


You could start with an empty Plotly object and then add the traces sequentially.

library(plotly)

temp <- structure(list(x_1 = c(74.651438, 75.31493, 76.736865, 77.858125, 
                       79.347856, 80.302483), y_1 = c(249.063605, 247.149121, 245.461889, 
                                                      243.811041, 242.382685, 240.300034), z_1 = c(4.373868, 3.653744, 
                                                                                                   4.101455, 4.134471, 4.225507, 4.890157), x_2 = c(85.468712, 86.637469, 
                                                                                                                                                    87.993127, 87.907308, 88.748766, 89.680155), y_2 = c(249.063405, 
                                                                                                                                                                                                         247.145423, 245.46148, 244.949469, 244.005001, 242.917665), z_2 = c(4.56633, 
                                                                                                                                                                                                                                                                             4.059976, 3.842906, 4.019021, 4.316799, 4.378894), x_3 = c(101.720648, 
                                                                                                                                                                                                                                                                                                                                        101.70598, 102.022836, 102.166059, 102.242424, 102.317043), y_3 = c(249.660075, 
                                                                                                                                                                                                                                                                                                                                                                                                            249.562464, 249.771452, 249.619983, 249.39349, 249.444531), z_3 = c(3.080686, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3.003508, 2.774651, 2.291644, 2.239727, 1.932501)), .Names = c("x_1", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "y_1", "z_1", "x_2", "y_2", "z_2", "x_3", "y_3", "z_3"), row.names = c(NA, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6L), class = "data.frame")

p <- plot_ly()
for(i in 1:3){
  x = paste0("x_",i)
  y = paste0("y_",i)
  z = paste0("z_",i)
  p <- add_trace(p, 
                 x = temp[[x]], 
                 y = temp[[y]], 
                 z = temp[[z]],
                 type = 'scatter3d', 
                 mode = 'lines', 
                 line = list(width = 1))
}

p



来源:https://stackoverflow.com/questions/47256136/add-trace-in-plotly-in-a-loop

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!