我在RStudio工作并有两个ggplots,称之为plot1和plot2。我想将它们排列在另一个之上并保存为eps格式。我已阅读以下有关该主题的帖子:
Export a graph to .eps file with R
Saving grid.arrange() plot to file
Side-by-side plots with ggplot2
我尝试了下面列出的多种方法,但都失败了。大多数都围绕着使用gridarrange。
1)我最初的方法是运行:
setEPS()
postscript("Figure1.eps",width=11.5,height=16)
grid.arrange(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
dev.off()
与链接1类似,但使用grid.arrange。 R中没有错误,我的目录中出现EPS文件,但文件大小很小,我无法在文件查看器中打开它,因为某些原因它似乎已损坏。
2)我的第二次尝试使用了ggsave:
grid.arrange(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
ggsave("Figure1.eps", p)
这仅保存第二个图。然后尝试链接2中的评论建议:
代码
p <- arrangeGrob(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
grid.draw(p) # interactive device
ggsave("Figure1.eps", p)
给出输出:Error in ggsave("saving.eps", p) : plot should be a ggplot2 plot
代码
grid.arrange(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
p<-arrangeGrob(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
ggsave("Figure1.eps", p)
给出输出:Error in ggsave("saving.eps", p) : plot should be a ggplot2 plot
代码
grid.arrange(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
ggsave <- ggplot2::ggsave; body(ggsave) <- body(ggplot2::ggsave)[-2]
p<-arrangeGrob(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
ggsave("Figure1.eps", p)
给出输出:
Saving 8.28 x 9.07 in image
TableGrob (2 x 1) "arrange": 2 grobs
z cells name grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (2-2,1-1) arrange gtable[layout]
在最后一种情况下,目录中会出现一个文件,但文件很小,无法打开。
3)我最后的尝试只是使用命令
png("Figure1.eps",height=11.5,width=16,units="cm",res=600)
grid.arrange(plot1,plot2,nrow=2,heights=c(9.5/20,10.5/20))
dev.off()
这会产生一个'eps'文件并且大小很大,可以打开,但我不确定是否要信任它。为什么png命令能够创建eps文件?我有一种感觉它只是一个png文件,但如果有可能的话会以某种方式掩盖为eps。有没有办法检查文件格式?
编辑:用于创建可以运行上述代码的图的代码。
data1<-data.frame(a=c(1,2,3,4,0.5,1,1.5,2,0.5,1,3,4),b=c(1,2,3,4,1,2,3,4,1,2,3,4),
c=c('graph1','graph1','graph1','graph1','graph2','graph2','graph2','graph2','graph3','graph3','graph3','graph3'))
data2<-data.frame(a=c(10,20,25,40,13,14,25,37,2,20,34,35),b=c(1,2,3,4,1,2,3,4,1,2,3,4),
c=c('graph1','graph1','graph1','graph1','graph2','graph2','graph2','graph2','graph3','graph3','graph3','graph3'))
plot1<-ggplot(data1, aes(x=b,y=a)) +
geom_line() +
geom_point(size=2.5) +
facet_wrap(~c, scales="fix") +
scale_x_continuous(limits=c(1,4),labels=c("Zero","Low","Med","High")) +
ylab("ylab1") +
coord_cartesian(ylim=c(0,4)) +
theme(legend.position="none",axis.title.x=element_blank(), panel.margin.x=unit(1.1, "lines"))
plot2<-ggplot(data2, aes(x=b,y=a)) +
geom_line() +
geom_point(size=2.5) +
facet_wrap(~c, scales="fix") +
scale_x_continuous(limits=c(1,4),labels=c("Zero","Low","Med","High")) +
coord_cartesian(ylim=c(0,40)) +
xlab("level of correlation") +
ylab("ylab2") +
theme(legend.position="none",axis.title.x=element_blank(), panel.margin.x=unit(1.1, "lines"))
编辑:我现在也意识到了
setEPS()
postscript("TestFig3.eps")
plot1
dev.off()
应该只是简单地创建一个eps文件(没有涉及grid.arrange)也不起作用。在R中创建了一个文件且没有错误消息,但它在某种程度上已经损坏。
理想情况下我想要一个
eps()
grid.arrange()
dev.off()
但?eps不提供包裹。
我意识到已经有很多关于此事的聊天,但是我无法从中找到解决方案。