我一直在寻找解决方案,但似乎大多数处理单独生成的图表被合并为PDF格式,而不是将使用分面生成的图分离到PDF的单独页面上。
使用以下代码在上述数据中,选择生成列表中的所有项目:
Ex<-read.csv("StackOverflowEx (3).csv")
library(ggplot2)
library(reshape2)
vars <- select.list(names(Ex),multiple=TRUE,graphics=TRUE)
Cases<-subset(Ex,select=vars)
gg<-melt(Cases,id=c("Item","Total","Admin"))
print(ggplot(gg, aes(x=Total,y=Admin))+
geom_point(colour="dark green",size=1.5)+
geom_point(aes(y=value,color=variable))+
geom_smooth(aes(y=value,fill=variable),
method=loess,size=1,linetype=1,se=T)+
facet_wrap(~variable,ncol=2,nrow=1000)+
ylim(0,1)+
labs(x="Expected",y="Admin",title=vars))
...应该生成所有8个(A-H)案例的小平面包装。然而,生成这种情况往往会破坏图表并使它们的可读性降低,实际上,我打算在500多个案例中使用它(它只返回标有列名称的条形图,没有可读图表)。
在转换为PDF时,是否可以指定要在单个页面上显示的构面图表数量,而不是将所有图表压缩到单个页面中?例如,使用上述数据,在单独包含所有8个案例的单独页面上生成两个2x2图(即第1页上的案例A-D,第2页上的案例E-H)。
我可以通过突出显示4个案例+“项目”,“总计”和&amp; “管理员”并重复接下来的4个案例并合并生成的PDF。然而,在实践中有超过500个案例,这意味着超过100次迭代,有很多人为错误的可能性。一些帮助自动化过程将是很好的。
答案 0 :(得分:7)
由于还没有答案。这是一个:
library(ggplot2)
library(reshape2)
Ex <- read.csv("C:/Users/Thomas/Desktop/StackOverflowEx (3).csv")
gg <- melt(Ex, id = c("Item", "Total", "Admin"))
# put in number of plots here
noPlots <- 4
# save all variables in a seperate vector to select in for-loop
allVars <- unique(gg$variable)
noVars <- length(allVars)
# indices for plotting variables
plotSequence <- c(seq(0, noVars-1, by = noPlots), noVars)
# pdf("plotpath.pdf") # uncomment to save the resulting plots in a pdf file
# loop over the variables to plot
for(ii in 2:length(plotSequence)){
# select start and end of variables to plot
start <- plotSequence[ii-1] + 1
end <- plotSequence[ii]
# subset the variables and save new temporary data.frame
tmp <- subset(gg, variable %in% allVars[start:end])
cat(unique(tmp$variable), "\n")
# generate plot
p <- ggplot(tmp, aes(x = Total, y = Admin))+
geom_point(colour = "dark green", size = 1.5)+
geom_point(aes(y = value, color = variable))+
geom_smooth(aes(y = value, fill = variable),
method = loess, size = 1, linetype = 1, se = T)+
facet_wrap(~variable, ncol = 2, nrow = 1000)+
ylim(0, 1)+
labs(x = "Expected", y = "Admin")
print(p)
}
# dev.off()