循环以获得带有图表库的时间序列图

时间:2015-12-10 20:21:41

标签: r function loops plot plotly

我想使用“plotly”库来获取data.frame中每个数字变量的几个时间序列图。我不知道为什么,但所有的情节都是指最后一个。

以下是我的尝试:

install.packages("plotly", repos="http://cran.rstudio.com/")
library("plotly")
dfdata <- apply(economics[,2:6], 2, scale)
df1 <- data.frame(dfdata, economics$date)

plotting <- function(data) {
  a <- list()
  for (i in 1:5) { 
    nam <- paste("p", i, sep = "")
    nam <- plot_ly(data, x = economics.date, y = data[,i])
    a[[i]] <- nam
  }
  return(a)
}

b <- plotting(df1)
b

2 个答案:

答案 0 :(得分:1)

所有绘图引用最后一个变量的原因是plot_ly函数在循环期间不进行评估,而只是保留对数据的引用。可以使用evaluate函数中的plot_ly参数更改此设置。

像这样修改你的功能代码,plotting返回的列表中的每个条目现在都不同了。

plotting <- function(data) {
    a <- list()
    for (i in 1:5) { 
        nam <- paste("p", i, sep = "")
        nam <- plot_ly(data, x = economics.date, y = data[,i], evaluate = TRUE)
        a[[i]] <- nam
    }
    return(a)
}

编辑: 此示例使用plotly 3.x.x.如果您使用plotly 4.x.x或更高版本,则此代码可能无法正常工作。有关详情,请参阅此处:https://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/

答案 1 :(得分:0)

假设您想为每个变量创建一个图表,您可以执行以下操作:

b <- lapply(setdiff(names(df1), "economics.date"), function(x) {
  plot_ly(df1, x = df1[["economics.date"]], y = df1[[x]])
})

b

setdiff(names(df1), "economics.date")为我们提供了每个其他列的向量,我们可以在lapply语句中引用它。