【发布时间】:2017-09-14 17:43:16
【问题描述】:
使用数据框列表时如何在循环中添加_trace
我使用下面的代码不断得到以下信息
df1<-c(seq(1:32))
df2<-df*2
df3<-df2*8
dff1<-sqrt(df1)
dff2<-sqrt(df2)
dff3<-sqrt(df3)
a<-cbind.data.frame(df1,dff1)
b<-cbind.data.frame(df2,dff2)
c<-cbind.data.frame(df3,dff3)
colnames(a)<-c("df1","df2")
colnames(b)<-c("df1","df2")
colnames(c)<-c("df1","df2")
df<-list()
df[[1]]<-a
df[[2]]<-b
df[[3]]<-c
pl<-plot_ly()
for(i in 1:3){
pl<- add_trace(pl,data=df[[i]],x=~df[[i]]$df1,y=~df[[i]]$df2,mode='lines',type='scatter')
}
pl
当使用 lapply 而不是 for 循环时,我得到三个单独的图而不是一个三线图
pl<-plot_ly()
pl<-lapply(1:3, function(i){
pl<- pl%>%
add_trace(data=df[[i]],x=~df[[i]]$df1,y=~df[[i]]$df2,mode='lines',type='scatter',inherit = TRUE)
})
pl
【问题讨论】:
-
在
add_trace中使用evaluate = TRUE。 -
我从其他帖子中知道 add_trace 中的 evaluate = TRUE。但这不起作用
-
我认为您的问题在于对
x和y使用美元符号表示法,而不是直接引用变量。请改用data=df[[i]],x=~df1,y=~df2。由于 plotly 4.0 评估是强制的,所以evaluation = TRUE是 no longer needed -
这适用于 for 循环。我使用 lapply 做了同样的改变,仍然产生三个单独的图表。有没有办法让 lapply 像时尚一样循环添加到 add_trace 而不是创建三个单独的图表
-
这三个独立的图表与
apply家族的工作方式有关。请参阅here,了解如何通过assign或<<-更改函数范围之外的内容,尽管在此任务中坚持循环是一个简单的选择。