web-dev-qa-db-ja.com

add_traceを使用してplot_lyグラフに複数の線を追加します

plot_lyコマンドを使用して、add_traceプロットに線を追加する例を見つけました。 add_traceを複数回使用せずに、プロットする線のリストを追加するにはどうすればよいですか?

トレースを追加するためにforループを試しましたが、これは期待どおりに機能しません。

my_lines <- list(
  list(x=1:10, y=2:11, color='red'),
  list(x=1:10, y=0:9, color='blue'),
  list(x=1:10, y=3:12, color='green')
)
p <- plot_ly()
p
for(line in my_lines) {  p <- add_trace(p, y=line[['y']], x=line[['x']], 
                 marker=list(color=line[['color']]))
}
p

しかし、これはたとえば期待どおりに機能します。

p <- plot_ly()
p <- add_trace(p, y=my_lines[[1]][['y']], x=my_lines[[1]][['x']],
               marker=list(color=my_lines[[1]][['color']]))
p <- add_trace(p, y=my_lines[[2]][['y']], x=my_lines[[2]][['x']],
               marker=list(color=my_lines[[2]][['color']]))
p <- add_trace(p, y=my_lines[[3]][['y']], x=my_lines[[3]][['x']],
               marker=list(color=my_lines[[3]][['color']]))
p

誰かが私にこれについてのヒントを与えることができることを願っています。

9
drmariod

評価を強制する/遅延評価を回避するには、evaluate = TRUEを設定する必要があります

p <- plot_ly()
p
for(line in my_lines) {  p <- add_trace(p, y=line[['y']], x=line[['x']], 
                 marker=list(color=line[['color']]),
                 evaluate = TRUE)
}
p
4
Jota

plotly 4.0のリリースにより、add_*ファミリーの関数のいずれかを呼び出すと評価が強制されるため、evaluate = Tを呼び出す必要がなくなると思います。

したがって、このようなものは正常に機能するはずです。

devtools::install_github("ropensci/plotly")
library(plotly)

p <- plot_ly()

for(i in 1:5){
  p <- add_trace(p, x = 1:10, y = rnorm(10), mode = "lines")
}

p

enter image description here

8
royr2