如何在R中的多绘图面板中跨绘图或在绘图之间进行注释
如果我在一个面板中有多个绘图,我希望能够放置跨越多个绘图区域或位于绘图区域之间的文本注释。我相信一定有办法做到这一点,但我需要一些人帮助我解决问题。如何在R中的多绘图面板中跨绘图或在绘图之间进行注释,r,graphics,R,Graphics,如果我在一个面板中有多个绘图,我希望能够放置跨越多个绘图区域或位于绘图区域之间的文本注释。我相信一定有办法做到这一点,但我需要一些人帮助我解决问题。 以下是一些假数据,用于在一个面板上创建四个图: 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")
以下是一些假数据,用于在一个面板上创建四个图:
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()
或mtext()
添加注释。但这仅在注释单个图形时有效。是否有一种方法可以添加相对于整个4个图形面板坐标的注释?我现在正在寻找基本图形的解决方案,但如果有人知道如何在ggplot2或lattice中执行类似的操作,我也很有兴趣看到这一点。
您想将
mtext
与outer=TRUE
一起使用。例如,mtext('Results2',side=1,line=-2,outer=TRUE)
和mtext('Results1',side=3,line=-20,outer=TRUE)
如果您确实想更好地控制这些类型的布局问题,可以使用恰当命名的布局
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)
m对于本例,layout
功能是最简单的,如前所示,但对于更一般的情况,您还应该学习grconvertX
和grconvertY
功能(以及使用par(xpd=
。convert函数可以为您提供不同坐标系的当前用户坐标中的坐标,因此,例如,您可以通过将标准化设备坐标转换为0.5来居中页面上的某些内容。以下是使用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)
@ MPLOUDE是的,<代码>版式非常光滑。像其他的BASE一样,它可以有点烦躁,但是你确实知道所有的PAR设置都快。这是个诀窍。谢谢让我知道“代码>版式< /代码>。我可以看到我会一遍又一遍的使用它。有人会说,当你走那么远的时候,它会是EAS。使用网格图形的ier(可能与gridBase包结合使用)grid和gridBase包当然值得一看,但我认为,在很多情况下,一组已经很容易完成的基本图可以添加基于“grconvertX”或grconvertY
的位置注释。在上面的示例中,你会将多行文字放在哪里?我无法实现这一点。之后操作代码中对hist的最后一次调用。您可能需要根据数据集值调整行数(in line=xx)