R multiplot写入绘图到文件网格包

时间:2015-01-25 15:49:27

标签: r plot grid

我有一个函数来创建一个多重绘图(带有许多子图的绘图)并将其写入文件。

multiplot <- function(plotlist=NULL, cols) {
  require(grid)

  # Make a list from the ... arguments and plotlist
  plots <- c(plotlist)

  numPlots = length(plots)

  # Make the panel
  plotCols = cols                       # Number of columns of plots
  plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols

  # Set up the page
  grid.newpage()
  pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))
  vplayout <- function(x, y)
    viewport(layout.pos.row = x, layout.pos.col = y)

  # Make each plot, in the correct location
  for (i in 1:numPlots) {
    curRow = ceiling(i/plotCols)
    curCol = (i-1) %% plotCols + 1
    print(plots[[i]], vp = vplayout(curRow, curCol ))
    #title(paste(product_name,'_ROC___AUC = ', mroc$auc))
  }

}

并调用该函数创建以下图:

filepath <- paste(filepath,'/','Norm_Method_',norm_method,'.jpg',sep="")
jpeg(filepath)  
#multiplot(list(ggplot1,ggplot2,ggplot3,ggplot4,ggplot5,ggplot6,ggplot7,ggplot8,linear_pred,roc.plot), cols=4)
multiplot(list(ggplot1,ggplot2,ggplot3,ggplot4,ggplot5,ggplot6,ggplot7,ggplot8,linear_pred), cols=3)
dev.off()

这是错误的情节看: enter image description here

显然图片需要刮擦,所以我在RStudio中最大化它并手动保存结果看起来好多了:enter image description here 任何想法如何自动写入文件在“最大化窗口”更好的版本的情节?

1 个答案:

答案 0 :(得分:0)

所以我建议使用包arrangeGrob中的gridExtra函数。

下面是一些示例代码:

require(ggplot2)

require(gridExtra)

data(iris)

p<-ggplot(iris)

a<-p+geom_histogram(aes(x=Sepal.Length))+ ggtitle("A plot")
b<-p+geom_histogram(aes(x=Sepal.Width))+ ggtitle("another PLOT")
c<-p+geom_point(aes(x=Sepal.Width, y=Sepal.Length))+ggtitle("PLOT CITY")
a2<-p+geom_histogram(aes(x=Sepal.Length))+ ggtitle("A plot")
b2<-p+geom_histogram(aes(x=Sepal.Width))+ ggtitle("another PLOT")
c2<-p+geom_point(aes(x=Sepal.Width, y=Sepal.Length))+ggtitle("PLOT CITY")

grobula <- arrangeGrob(a,b,c,a2,b2,c2 ,ncol=3, nrow=2,
                             main = textGrob("some plots", gp = gpar(fontsize=18, fontface="bold.italic", fontsize=18)),
                             sub = textGrob("some subtitle", x=0, hjust=-0.5, vjust=0.1, gp = gpar(fontface = "italic", fontsize = 15)))

这会输出一个我称为grobula的对象。然后,您可以像普通ggplot对象一样打印或保存对象(例如print(grobula)ggsave(grobula,file=x.pdf)

这使你的功能有点多余;您可以将相应的值插入ncol中的nrowarrangeGrob

最后,要在ggsave中指定绘图大小,您可以修改widthheight参数。您可能还需要调整标题和事物的各种文本大小,以使所有内容适合您的最终组合图。您可以通过更改element.text参数来修改ggplot标题中的文本大小。您可以在此处找到相应的文档。

http://docs.ggplot2.org/0.9.2.1/theme.html

enter image description here