如何将文本放在 R 中子图的顶部

How to put text at the top of subplots in R

如果您不知道如何在 R 中的每个子图的顶部放置文本(使用文本函数以便可以更自由地编辑它,而不是图例函数)当坐标发生变化而您不知道时知道 y 最大值或 x 最大值(例如,对于您事先不知道频率的直方图)您是怎么做到的?

附录:另外,mtext 使用边距,我在这里说的是坐标 space,而不是边距 space。

您可以使用 par ('usr')。它为您提供了地块的当前坐标。如果你想在每个子图的特定区域中显示文本并且你事先不知道坐标(例如直方图),这真的很有用。输出如下:

par('usr')
[1] -0.28  7.28 -3.00 78.00

其中x min 是列表的第一个成员,x max 是第二个,y min 是第三个,y max 是第四个。您可以将 par('usr') 视为 R 中的向量,如果您希望它位于左上角,您可以这样说:

text(par('usr')[1]+2,.9*par('usr')[4],labels="blahblah")

据此,它将绘制在图的上部 10% 和距图的最左侧坐标 +2 space。当然你可以调整这个,但那或多或少会在左上角。

将此代码用于我的数据:

y <- rnorm(100)
z <- rnorm(100)
par(mfrow = c(1,2))
hist(y, breaks = 30)
text(.8 * par('usr')[2], .9 * par('usr')[4], labels = paste("mean:", round(mean(y), 2)))
text(.8 * par('usr')[2], .86 * par('usr')[4], labels = paste("median:", round(median(y), 2)))
hist(z, breaks = 30)
text(.8 * par('usr')[2], .9 * par('usr')[4], labels = paste("mean:", round(mean(z), 2)))
text(.8 * par('usr')[2], .86 * par('usr')[4], labels = paste("median:", round(median(z), 2)))
mtext("distributions", side = 3, line = -2, outer = TRUE, col = 2) # added mtext to show how I would use it to create a title

我得到了这张图片:

假设你想要文本在绘图区域内,你可以使用legend,并通过关键字指定位置(详见?legend) :

par(mfrow=c(2, 2))
sapply(1:4, function(i) {
  plot(runif(10))
  legend('top', paste('Plot', i), bty='n', text.font=2)
})

您也可以使用 mtext:

mtext(paste('Plot', i), 3, line = -1.5)