3

嗨,我正在使用 Cookbook for R 上的解决方案一次绘制多个 ggplots ......即此链接上页面底部的代码http://wiki.stdout.org/rcookbook/Graphs/Multiple% 20 个图形%20on%20one%20page%20(ggplot2)/

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

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

任何帮助将非常感激

4

2 回答 2

9

使用gridExtra库和函数grid.arrange来做到这一点。例子:

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

查看?grid.arrange更多选项。

于 2012-10-04T07:39:17.320 回答
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))
        }
    }
}
于 2021-05-02T19:48:09.443 回答