2015-01-02 3 views
2

Я хотел бы сделать один граненый сюжет (решетчатый стиль), изменяя параметр span до более гладкого лесса. Я попытался использовать цикл for, как показано ниже, но сюжет не был создан. Если бы я использовал функцию ggsave, графики сохранялись отдельно.facet ggplot by span аргумент loess smoother

Кроме того, мне было интересно, есть ли более скупой способ выполнить такую ​​задачу?

x <- rep(1:10,4) 
y <- 1.2*x + rnorm(40,0,3) 
s <- seq(0.2,0.8,0.1) 

# plot the series of plots by varying the span parameter 
for (s_i in s) { 
    qplot(x, y, geom = 'c('point','smooth'), span = s_i) 
} 

ответ

3

Ваш подход будет прекрасно работать, если вы явно print сюжет (и избавиться от дополнительных ' знака):

for (s_i in s) { 
    print(qplot(x, y, geom = c('point','smooth'), span = s_i)) 
} 

Что касается других способов сделать это, я бы рекомендовал поставить все ваши участки в списке

changing_span = list() 
for (i in seq_along(s)) { 
    changing_span[[i]] <- qplot(x, y, geom = c('point','smooth'), span = s[i]) + 
     labs(title = paste("span:", s[i])) 
} 

Тогда вы можете построить все они вместе с, например,

library(gridExtra) 
do.call(grid.arrange, changing_span) 
+1

Вы также можете имитировать фасетирование, добавив фасетную полосу с значением диапазона для каждого графика. Например, (используя 'ggplot' вместо' qplot'): 'lapply (s, function (span) { ggplot (data.frame (dat, span = paste0 (" Span = ", span)), aes (x, y)) + geom_point() + geom_smooth (span = span) + facet_grid (. ~ span) }) ' – eipi10

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