The problem here is that setting par(mfg =) does an implicit par(new=TRUE)
on the next plot (as otherwise it would advance to the next position).
That is going to be confusing if there has been no plot, and that is what
you are seeing: the first plot is done at c(1,1), overriding the setting
of par(mfg =). (The first plot after par(mfrow =) clears the device and
set up the parameters, _unless_ it is done with new=TRUE.)
Solutions are to use screen() or layout() or do a first empty plot
after par(mfrow = c(2, 2)). E.g.
par(mfrow = c(2, 2))
plot.new()
pos <- as.matrix(expand.grid(1:2, 1:2))
for (ix in 4:1) {par(mfg = pos[ix, ]); plot(1:ix)}
does what I think you intended.
On Sat, 17 Mar 2007, Ken Knoblauch wrote:
> I'm having a problem with the mfg option of par. Am I making an error
in my
> usage? Here is a simple example that I thought would plot to the 4 corners
> of a 2x2 plot but doesn't plot to the lower right and plots twice on
the
> upper left.
>
> par(mfrow = c(2, 2))
> pos <- as.matrix(expand.grid(1:2, 1:2))
> for (ix in 4:1) {
> par(mfg = pos[ix, ])
> plot(1:5)
> }
>
> Thank you in advance.
>
> R version 2.4.1 Patched (2007-01-23 r40561)
> i386-apple-darwin8.8.1
>
> locale:
> C
>
> attached base packages:
> [1] "stats" "graphics" "grDevices"
"utils" "datasets" "methods"
> [7] "base"
>
>
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595