Dear r-helpers,
I have six panels: op(par(mfrow = c(2, 3), xaxt = 'n', yaxt =
'n',
pty = 's').
Each of them has a variable main = 'i', and xlab = '', ylab =
''
I would like to achieve two things:
(1) a common x-axis label under panel 5, and one label to the left of
panels 1 and 4
(2) minimal space between the panels.
I have looked for examples, and even the thorough "Les param?tres
graphiques" didn't help me: I haven't been able to reduce the space
between the rows of panels nearly enough. My best attempt:
par(pty = 's', xaxt = 'n', yaxt = 'n', mfrow = c(2, 3),
mgp = c(1, 0,
0), mar = c(1.1, 2.1, 1.1, 0.1))
_____________________________
Professor Michael Kubovy
University of Virginia
Department of Psychology
USPS: P.O.Box 400400 Charlottesville, VA 22904-4400
Parcels: Room 102 Gilmer Hall
McCormick Road Charlottesville, VA 22903
Office: B011 +1-434-982-4729
Lab: B019 +1-434-982-4751
Fax: +1-434-982-4766
WWW: http://www.people.virginia.edu/~mk9y/
This will get you started
x <- rnorm(20)
y <- rnorm(20)
par(pty = 's', xaxt = 'n', yaxt = 'n', mfrow = c(2, 3),
mgp= c(1, 0, 0), mar = c(1.1, 2.1, 1.1, 0.1))
plot(y ~ x, main=1, xlab="", ylab="y1")
plot(y ~ x, main=2, xlab="", ylab="")
plot(y ~ x, main=3, xlab="", ylab="")
plot(y ~ x, main=4, xlab="", ylab="y4")
plot(y ~ x, main=5, xlab="", ylab="", xaxt="s")
plot(y ~ x, main=6, xlab="", ylab="")
I would do something like this in lattice. It defaults to something prettier
and gives more control if you don't want the defaults.
tmp <- data.frame(x=rnorm(120), y=rnorm(120), a=factor(rep(1:6, 20)))
xyplot(y ~ x | a, data=tmp)
xyplot(y ~ x | a, data=tmp, aspect=1, layout=c(3,2),
scales=list(x=list(alternating=c(0,1,0)), y=list(alternating=FALSE)))
Back to regular graphics. I misunderstood your request for a single y label.
This comes closer. I used oma to squeeeze the two rows closer together.
I used two axis(1) statements. The first puts the ticks on the border of
the box. The second one puts the labels far enough away that they aren't
cluttered. Similar adjustment is called for on the main title of each panel.
x <- rnorm(20)
y <- rnorm(20)
old.par <- par(pty = 's', xaxt = 'n', yaxt = 'n',
mfrow = c(2, 3),
mar = c(1.1, 2.1, 1.1, 0.1), oma=c(12,2,0,2))
plot(y ~ x, main=1, xlab="", ylab="")
plot(y ~ x, main=2, xlab="", ylab="")
plot(y ~ x, main=3, xlab="", ylab="")
plot(y ~ x, main=4, xlab="", ylab="")
mtext("Y label", side=2, at=2, line=2)
plot(y ~ x, main=5, xlab="", ylab="")
axis(1, xaxt="s", labels=FALSE)
axis(1, xaxt="s", tick=FALSE, line=1)
plot(y ~ x, main=6, xlab="", ylab="")
par(old.par)