Цикл для получения графиков временных рядов с библиотекой 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

person user2436648    schedule 10.12.2015    source источник


Ответы (2)


Причина, по которой все графики ссылаются на последнюю переменную, заключается в том, что функция 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/

person mal    schedule 18.02.2016

Предполагая, что вам нужен один график для каждой переменной, вы можете просто сделать что-то вроде:

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.

person A5C1D2H2I1M1N2O1R2T1    schedule 18.12.2015
comment
Ах, дорогой Ананда, почему у меня такое чувство, что это было для Пожирателя сорняков? ... :) - person Bhargav Rao; 02.01.2016
comment
@BhargavRao, потому что это было ..... Но я получил это в другом месте :-) Хорошая коллекция шляп, кстати, у тебя там !!! - person A5C1D2H2I1M1N2O1R2T1; 03.01.2016
comment
@BhargavRao, я получил это здесь, если не ошибаюсь. И, если вы хотите знать, как вы можете называть себя до конца сегодняшнего дня, посмотри :-) - person A5C1D2H2I1M1N2O1R2T1; 03.01.2016
comment
Спасибо. ... Почему ты ослабел в пути? Однажды ты был вторым в таблице лидеров :) - person Bhargav Rao; 03.01.2016
comment
@BhargavRao, моя работа требует время от времени поездок, и это был один из таких периодов. Только так много, что можно ответить по телефону.... - person A5C1D2H2I1M1N2O1R2T1; 03.01.2016
comment
Хороший. 29 головных уборов — тоже большое достижение! Поздравляю. Пишите мне в следующий раз (здесь или в чате), если будете искать шляпы. Буду рад присоединиться к вам :D - person Bhargav Rao; 03.01.2016
comment
Давайте продолжим обсуждение в чате. - person A5C1D2H2I1M1N2O1R2T1; 03.01.2016