2017-08-01 42 views
0

我想绘制多行,使用R和plot_ly与add_trace结合使用。如果我使用下面的代码,它像预期:在R中plot_ly的奇怪行为,如果使用for循环创建动态行数

df <- data.frame(x=c(1,2,3), y=c(2,4,5), y=c(4,1,3)) 
p <- plot_ly(mode="lines", type="scatter") 
p <- add_trace(p, x=~df[,1], y=~df[,2]) 
p <- add_trace(p, x=~df[,1], y=~df[,3]) 
p 

,并给出this image

如果我尝试使用一个for循环,而不是这样的,这是行不通的:

df <- data.frame(x=c(1,2,3), y=c(2,4,5), y=c(4,1,3)) 
p <- plot_ly(mode="lines", type="scatter") 
for(i in 1:2) 
{ 
    p <- add_trace(p, x=~df[,1], y=~df[,i]) 
} 
p 

这给我只有一个单行(实际上是后者)here

可能有谁解释我请,这里发生了什么,以及如何修复第二版? 谢谢

+1

如果你正在循环中添加很多痕迹,那么这个答案将与你有关:https://stackoverflow.com/a/38170340/2761575 – dww

回答

0

我不能准确地解释这里发生了什么,因为在几个月前曾经有过剧烈的变化,我从未真正赶上过。

for索引更改为2:3来匹配数据并删除~df[,]调用只是简单df[,],它应该工作。它至少在我的结尾。

+0

现在哇,它的工作原理。其实我认为使用波浪号是新风格所必需的......我不明白为什么要这样做。当然索引是我的一个错误,但不是真正的问题^^实际上'1:2'也应该鞋两个地块,但不同的... – Martin

+0

是的,我还隐约回想起波浪线是新需要的。好吧。很高兴它的工作。 – joelnNC

+0

'〜'用于通过列名指定列 - 即让其知道将数据帧范围内的名称解释为数据参数。在这个例子中,你用'df [,i]'而不是名字引用列,所以不需要代字符 – dww