8

如果我在一个面板中有多个绘图,我希望能够放置跨越多个绘图区域或绘图区域之间的文本注释。我确信一定有办法做到这一点,但我需要一些帮助来弄清楚如何做。
这是一些假数据,可在一个面板上创建四个图:

x1 = rnorm(100)
x2 = rnorm(100)
x3 = rnorm(100)
x4 = rnorm(100)

par(mfrow=c(2,2)) 
hist(x1, xlab="", main="Group A")
hist(x2, xlab="", main="Group B")
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

这将创建下面的多图面板,除了我还添加了红色文本。在 R 中创建图形面板后,我通过注释 PDF 文件添加了红色文本,然后将其保存为 PDF。我想学习的是如何在 R 中以编程方式注释图形面板,而不必保存它并注释保存的文件。
通常,我会使用text()or添加注释mtext()。但这仅在您注释单个图形时才有效。有没有办法添加相对于 4 个图形的整个面板的坐标的注释?我现在正在寻找基本图形的解决方案,但如果有人知道如何在 ggplot2 或 lattice 中做类似的事情,我也会有兴趣看到它。 在此处输入图像描述

4

4 回答 4

11

如果你真的想更好地控制这些类型的布局问题,你可以使用恰当命名的layout.

m <- matrix(c(1,2,3,3,4,5,6,6),ncol = 2,byrow = TRUE)
layout(m,widths = c(0.5,0.5),heights = c(0.45,0.05,0.45,0.05))

par(mar = c(2,4,4,2) + 0.1)
hist(x1, xlab="", main="Group A")
hist(x2, xlab="", main="Group B")

par(mar = c(0,0,0,0)) 
plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
u <- par("usr")
text(1,u[4],labels = "Here",col = "red",pos = 1)

par(mar = c(2,4,2,2) + 0.1)
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

par(mar = c(0,0,0,0)) 
plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
u <- par("usr")
text(1,u[4],labels = "Here",col = "red",pos = 1)

在此处输入图像描述

于 2012-06-25T23:49:20.253 回答
7

您想使用mtextwith outer=TRUE。例如,mtext('Results2', side=1, line=-2, outer=TRUE)mtext('Results1', side=3, line=-20, outer=TRUE)

于 2012-06-25T23:35:41.687 回答
4

对于这个例子,layout函数是最简单的,正如已经展示的那样,但对于更一般的情况,您还应该学习grconvertXandgrconvertY函数(以及使用 设置裁剪par(xpd=。转换函数可以为您提供不同坐标系的当前用户坐标中的坐标,因此,例如,您可以通过从标准化设备坐标转换 0.5 将某些内容放在页面上。

于 2012-06-27T17:21:49.753 回答
3

这是使用 Greg Snow 方法的示例:

par(mfrow=c(2, 2))
replicate(4, plot(matrix(runif(20), nrow=10)))
text(grconvertX(.5, "ndc", "user"), grconvertY(.25, "ndc", "user"), "TEST", cex=3, col="red", xpd=NA)
text(grconvertX(.5, "ndc", "user"), grconvertY(.75, "ndc", "user"), "TEST", cex=3, col="red", xpd=NA)

重叠图

于 2019-11-15T03:58:20.560 回答