是否需要额外的循环才能将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 =“”)]?
答案 0 :(得分: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()
答案 1 :(得分: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()