将grid.arrange中的两个ggplots保存为eps文件格式

时间:2016-01-08 11:32:20

标签: r ggplot2 eps

我在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不提供包裹。

我意识到已经有很多关于此事的聊天,但是我无法从中找到解决方案。

0 个答案:

没有答案