用par(mfrow)编辑的graphics面板的常见主标题

我有一个与par(mfrow=c(2,2))一起绘制的4个地块的汇编。 我想为上述2个地块绘制一个共同的标题,并且在左右两个地块之间居中的下面两个图板共同标题。

这可能吗?

应该工作,但你需要玩弄line参数来让它恰到好处:

 par(mfrow = c(2, 2)) plot(iris$Petal.Length, iris$Petal.Width) plot(iris$Sepal.Length, iris$Petal.Width) plot(iris$Sepal.Width, iris$Petal.Width) plot(iris$Sepal.Length, iris$Petal.Width) mtext("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE) 

在这里输入图像说明

mtext文字代表“保证金文本”。 side = 3表示将其放在“顶部”边缘。 line = -21表示将位置偏移21行。 outer = TRUE表示可以使用外边界区域。

要在顶部添加另一个“标题”,可以使用mtext("My 'Title' in a strange place", side = 3, line = -2, outer = TRUE)

您可以使用函数layout()并设置两个列中出现的两个绘图区域(请参阅matrix()的重复数字1和3)。 然后我用plot.new()text()来设置标题。 你可以玩边缘和高度,以获得更好的代表性。

 x<-1:10 par(mar=c(2.5,2.5,1,1)) layout(matrix(c(1,2,3,4,1,5,3,6),ncol=2),heights=c(1,3,1,3)) plot.new() text(0.5,0.5,"First title",cex=2,font=2) plot(x) plot.new() text(0.5,0.5,"Second title",cex=2,font=2) hist(x) boxplot(x) barplot(x) 

在这里输入图像说明

同样的,但粗体可以使用title(...)与上面相同的论点:

 title("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE) 

这是另一种方法,使用这个post中的line2user函数。

 par(mfrow = c(2, 2)) plot(runif(100)) plot(runif(100)) text(line2user(line=mean(par('mar')[c(2, 4)]), side=2), line2user(line=2, side=3), 'First title', xpd=NA, cex=2, font=2) plot(runif(100)) plot(runif(100)) text(line2user(line=mean(par('mar')[c(2, 4)]), side=2), line2user(line=2, side=3), 'Second title', xpd=NA, cex=2, font=2) 

centered_titles

这里,标题的位置比line2user(2, 3)的上边缘高2行,如line2user(2, 3) 。 我们将它与第二和第四个地块的偏移量相加,左右边距的合并宽度的一半即mean(par('mar')[c(2, 4)])


line2user表示用户坐标轴上的偏移量(行数),定义如下:

 line2user <- function(line, side) { lh <- par('cin')[2] * par('cex') * par('lheight') x_off <- diff(grconvertX(0:1, 'inches', 'user')) y_off <- diff(grconvertY(0:1, 'inches', 'user')) switch(side, `1` = par('usr')[3] - line * y_off * lh, `2` = par('usr')[1] - line * x_off * lh, `3` = par('usr')[4] + line * y_off * lh, `4` = par('usr')[2] + line * x_off * lh, stop("side must be 1, 2, 3, or 4", call.=FALSE)) }