2015-12-10 2 views
1

Я хочу использовать библиотеку «plotly», чтобы получить несколько графиков временных рядов для каждой числовой переменной в data.frame. Я не знаю, почему, но все сюжеты относятся к последнему.Loop, чтобы получить графики временных рядов с библиотекой plotly

Вот что я пробовал:

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 

ответ

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.

+0

А, Дорогой Ананда, почему у меня такое чувство, что это было для «Укротителя пищи»? ... :) –

+0

@BhargavRao, потому что это было ..... Но я получил его в другом месте :-) Ницца коллекция коллекций шляпы у вас там, кстати !!! – A5C1D2H2I1M1N2O1R2T1

+0

@BhargavRao, я получил его [здесь] (http://stackoverflow.com/a/34456039/1270695), если я не ошибаюсь. И, если вы хотите знать, что вы хотите назвать себя до конца сегодняшнего дня, [проверьте это] (http://english.stackexchange.com/questions/142420/a-name-for-hat-collectors) :-) – A5C1D2H2I1M1N2O1R2T1

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) 
} 

EDIT: В этом примере используется plotly 3.x.x. Если вы используете plotly 4.x.x или выше, этот код может не работать так, как есть. См. Здесь для получения более подробной информации: https://www.r-bloggers.com/upgrading-to-plotly-4-0-and-above/

Смежные вопросы