If I have several plots in a single panel, I would like to be able to put text annotations that go across more than one plot area or that go in between plot areas. I\'m sure
For this example the layout
function is simplest as has been already shown, but for more general cases you should also learn the grconvertX
and grconvertY
functions (along with setting clipping using par(xpd=
. The convert functions can give you the coordinates in the current user coordinates for different coordinate systems, so for example you could center something on the page by converting 0.5 from the normalized device coordinates.
Here is an example using Greg Snow's approach:
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)
If you truly want finer control over these kinds of layout issues, you can use the aptly named 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)
You want to use mtext
with outer=TRUE
. For instance, mtext('Results2', side=1, line=-2, outer=TRUE)
and mtext('Results1', side=3, line=-20, outer=TRUE)
.