Запись в pdf с d_ply, множественные ggplots, переключение на несколько переменных

Требуется ли дополнительный цикл для записи ряда графиков из ggplot в один.pdf, а не как отдельный.pdf для каждого сюжета? В противном случае этот код делает то, что я хочу: подмножество по типу, запись серии массивов ggplot в pdf - один график сетки для каждого местоположения, наложенного цветными годами, ось y - тип, x ось - метка дня. Другие предложения/улучшения?

d_ply(m,"type",function(a) {
 p <- ggplot( a, aes(y=result, x=day, color=colorcode)) + geom_point()
 q <-p + plotOptions + ylab(a$type) 
 print(q)
 ggsave(paste(a$type,".pdf"), plot=q) 
 })

образец данных

a<-factor(c(rep("A",4),rep("B",4)))
 b<-factor(c(rep("2006",4),rep("2007",4)))
 d<-c(rep(13,4),rep(14,4))
 e<-factor(c(rep("birds",4),rep("fish",4)))
 f<-sample((25:100),8)
 g<-factor(c(rep("2003-12",4),rep("2003",4))) 
 m<-data.frame(a,b,d,e,f,g)
 colnames(m)<-c("location","year","day","type","result","colorcode")

 names(m)<-tolower(names(m))


 backColor <- "moccasin"
 plotOptions <- list(scale_colour_manual(values = c("skyblue","royalblue" ), name="year"), 
 facet_wrap(~ location, ncol=4))

Спасибо за любые комментарии.

Обновить

Итак, мой первоначальный проект кода пробовал то, что вы предложили, но результатом был пустой pdf:

pdf(file="test.pdf")
d_ply(m,"type",function(a) {
 p <- ggplot( a, aes(y=result, x=day, color=colorcode)) + geom_point()
 p + plotOptions + ylab(a$type) 

 }) 
dev.off()

Это было связано с тем, что явным образом не распечатывал обновление до p? Онлайн-дискуссия об этом идет по разным направлениям, некоторые очень сложные, некоторые с вызовами ggsave и т.д. Поэтому я пришел с вызовом ggsave.

Последний вопрос: объединить значения в двух факториальных полях для ylab, скажем, для привязки к единице, будет что-то вроде этой работы: a [c ("f1", "f2"), sep = "")]?

2 ответа

Если вам нужно несколько графиков в PDF файле, это один из способов сделать это:

pdf("allinone.pdf")
d_ply(m,"type",function(a) {
 p <- ggplot( a, aes(y=result, x=day, color=colorcode)) + geom_point()
 print(p + plotOptions + ylab(a$type))
}) 
dev.off()


Несколько графиков в одном формате pdf:

library(grid)
vplayout <- function(x, y)
 viewport(layout.pos.row = x, layout.pos.col = y)
pdf("AllInOne.pdf", width = 12, height = 12)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 2)))
print(p, vp = vplayout(1, 1))
print(q, vp = vplayout(1, 2))
print(p, vp = vplayout(2, 1))
print(q, vp = vplayout(2, 2))
dev.off()

licensed under cc by-sa 3.0 with attribution.