如何在R中的多绘图面板中的绘图之间或之间进行注释

时间:2012-06-25 23:19:40

标签: 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")
hist(x3, xlab="", main="")
hist(x4, xlab="", main="")

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

4 个答案:

答案 0 :(得分:10)

如果您真的希望更好地控制这些类型的布局问题,可以使用恰当命名的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)

enter image description here

答案 1 :(得分:7)

您希望将mtextouter=TRUE一起使用。例如,mtext('Results2', side=1, line=-2, outer=TRUE)mtext('Results1', side=3, line=-20, outer=TRUE)

答案 2 :(得分:3)

对于此示例,layout函数最简单,如已经显示的那样,但对于更一般的情况,您还应该学习grconvertXgrconvertY函数(以及使用{设置剪裁) {1}}。转换函数可以为您提供不同坐标系的当前用户坐标中的坐标,例如,您可以通过从规范化设备坐标转换0.5来在页面上居中。

答案 3 :(得分:0)

以下是使用格雷格·斯诺(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)

Overplot