2015-01-09 5 views
0

Я хотел бы последовательно добавлять строки к объекту ggplot. Но я не могу получить следующий якобы простой код для работы:Использование geom_line в цикле for

фрейм данных содержит временные ряды, которые я хочу, чтобы построить на периоды от 0 до 20.

p <- ggplot(data=dfp, aes(x=seq(0,20,1), y=dfp)) 

for (i in 1:7) { 
    p <- p + geom_line(aes(y=dfp[i])) 
} 

p 
+3

'dput (dfp)' поможет. Ошибка или ошибочный вывод, который вы получаете плюс ожидаемый результат. И если в фрейме данных 'dfp' нет столбца' dfp', это не будет работать вообще. – hrbrmstr

+2

Просто «расплавьте» свои данные. – Gregor

+0

Предоставьте образцы данных, чтобы мы могли вам помочь !!! – Koundy

ответ

3

Самый простой способ заключается в использовании aes_string вместо aes.

# load necessary package 
require(ggplot2) 
# create sample data 
dfp <- data.frame(matrix(rnorm(147), nrow=21)) 
# original plot (removed unnecessary call to y) 
p <- ggplot(data=dfp, aes(x=seq(0,20,1))) 
# loop 
for (i in 1:7) { 
    # use aes_string with names of the data.frame 
    p <- p + geom_line(aes_string(y = names(dfp)[i])) 
} 
# print the result 
print(p) 
2

Используя тот же dfp от ответа Тени:

library(tidyr) 
library(dplyr) 

, а затем:

dfp %>% gather() %>% group_by(key) %>% 
     mutate(x=1:n()) %>% 
     ggplot(aes(x=x, y=value,group=key)) + geom_line() 

ggplot from tidy data

добавить colour=key к aes() вызова, если вы также хотите легенду. Попробуйте запустить часть трубы, чтобы увидеть, что gather, а остальные биты.