多个ggplots整体标题

时间:2012-10-04 07:30:22

标签: r ggplot2

您好我正在使用Cookbook for R上的解决方案一次性绘制多个ggplots ...即。此链接http://wiki.stdout.org/rcookbook/Graphs/Multiple%20graphs%20on%20one%20page%20(ggplot2)/

页面底部的代码

我想为这个情节添加一个整体标题,但我不知道该怎么做。即我希望能够有一个修改过的函数,它具有标题的附加参数,如下所示

multiplot(..., plotlist=NULL, file, cols=1, layout=NULL, title="")

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:6)

使用gridExtra库和函数grid.arrange来执行此操作。示例:

 p1 <-qplot(factor(cyl), data=mtcars, geom="bar")
 library(gridExtra)
 grid.arrange(p1, p1, p1, p1, main = "Overall Title")

有关更多选项,请参阅?grid.arrange

答案 1 :(得分:0)

试试这个:

multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL, title = "") {
    library(grid)
    
    # Make a list from the ... arguments and plotlist
    plots <- c(list(...), plotlist)
    
    numPlots = length(plots)
    
    # If layout is NULL, then use 'cols' to determine layout
    if (is.null(layout)) {
        # Make the panel
        # ncol: Number of columns of plots
        # nrow: Number of rows needed, calculated from # of cols
        layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),
                         ncol = cols, nrow = ceiling(numPlots/cols))
    }
    
    if (numPlots==1) {
        print(plots[[1]])
        
    } else if (title == "") {
        # Set up the page
        grid.newpage()
        pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))
        
        # Make each plot, in the correct location
        for (i in 1:numPlots) {
            # Get the i,j matrix positions of the regions that contain this subplot
            matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))
            
            print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
                                            layout.pos.col = matchidx$col))
        }
    } else {
        # Set up the page
        grid.newpage()
        #We add one row for the title
        pushViewport(
            viewport(
                layout = grid.layout(
                    nrow(layout) + 1,
                    ncol(layout),
                    heights = c(1, rep_len(10, ncol(layout)))
                )
            )
        )
        grid.text(label = title, vp = viewport(layout.pos.row = 1, layout.pos.col = 1:ncol(layout)))
        
        # Make each plot, in the correct location
        for (i in 1:numPlots) {
            # Get the i,j matrix positions of the regions that contain this subplot
            matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))
            
            print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row + 1,
                                            layout.pos.col = matchidx$col))
        }
    }
}