使用多个面板在R中准备出版品质的数字

时间:2014-06-18 19:21:10

标签: r data-visualization ggplot2

我有一个特定的问题,即以tiff格式生成300ppi图以供发布。我发现ggsave可以使用单个绘图精美地工作,然后可以将其导出到GIMP以压缩生成的大型tiff文件。但是,在绘制彼此相邻的两个数字时似乎遇到了麻烦,例如

plot1<-ggplot(.........)
plot2<-ggplot(.........)
grid.arrange(plot1, plot2, ncol=2)

ggsave(filename = "Figure 1.tiff", scale = 1, width = 10, height = 5, 
       units = "cm", dpi = 300)

这导致只有plot2出现在生成的tiff文件中,而情节1无处可见。

我还有一个不使用ggplot的图,但是由barplot2和matplot生成的三个图组成,但可能这也面临着类似的问题。从本质上讲,任何人都可以建议一种方法,将出现在绘图窗口中的绘图(我使用RStudio)中出现的内容翻译成高分辨率的tiff文件,尽可能少做文章吗?

1 个答案:

答案 0 :(得分:0)

我最近有同样的问题,我找不到现成的解决方案,我最终为ggplot对象列表创建了一个包装函数,试图在一种平衡网格上绘制条目。

'plotP' <- function (P){
  # P is a list of plots
  require(gridExtra)
  N <- length(P)
  Ncol <- ceiling(sqrt(N))
  Nrow <- ceiling(N/Ncol)
  grid.newpage()
  pushViewport(viewport(layout=grid.layout(Nrow, Ncol)))
  row <- 1
  col <- 1
  for (i in 1:N){
    print(P[[i]], vp=viewport(layout.pos.row=row, layout.pos.col=col)) 
    col <- col + 1
    if (col > Ncol){
      col <- 1
      row <- row + 1
    }
  }
}

现在您可以在一个命令中绘制图形并保存设备

plotP(list(plot1, plot2))
name <- 'grid-of-plots'
height <- 6
width <- 8
dpi <- 300
dev.copy(tiff, paste0(name, ".tiff"), width = width*dpi, height =height*dpi)
try(dev.off(), silent = TRUE)#close window

希望它有所帮助,

亲切的问候