2014-04-04 79 views
0

是否需要一個額外的循環才能將ggplot的一系列圖形寫入單個.pdf,而不是將每個圖形作爲單獨的.pdf?否則,這段代碼按照我的要求做:按類型子集,將ggplot數組寫入pdf - 每個位置用顏色編碼的年份覆蓋一個網格圖,y軸標籤爲類型,x軸標籤爲日期。其他建議/改進?使用d_ply寫入pdf,多個ggplots,循環多個變量

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 =「」)] ?

回答

1

如果你想每個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() 
+0

當一個函數調用的預期結果在R打印某種對象,而結果是一個空文件,這是一個很好的指標,顯式的打印電話是必要的? – user2009447

2

在一個單一的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() 
+0

這實際上是一種整潔 - 特別指揮地塊到網格上的位置。有時ggplot就是所需要的,有時它只是對直接控制格式有用。 – user2009447