用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)
这里,标题的位置比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)) }