In practice, I have never used 'mfg', but one thing it allows you to do is to use the figures defined by par(mfrow/mfcol) in whatever order you like (rather than just by row or by column).

Paul

On 13/11/25 10:25, Naresh Gurbuxani wrote:
Paul,

First solution works for me.  To change something in an earlier figure, I can 
start over and redraw all figures.

In practice, how is mfg used?

Thanks,
Naresh

Sent from my iPhone

On Nov 12, 2025, at 3:04 PM, Paul Murrell <[email protected]> wrote:

Hi

Base graphics is designed for drawing everything in a figure before moving on 
to the next figure.  Also, 'mfg' can only be set via par().
Are you looking for something like this ... ?


par(mfrow = c(2, 2))
for (i in 1:2) {
    for (j in 1:2) {
        par(mfg = c(i, j))
        plot(c(0, 1), c(0, 1), type = "n")
        text(0.5, 0.5, labels = paste("(", i, ",", j, ")"))
    }
}


If you really want to revisit previous figures, you might try split.screen(), 
but it is pretty fragile and, as the example below shows, still not designed 
for revisiting a previous *plot* (just a previous figure region) ...


split.screen(c(2, 2))
for (i in 1:4) {
    screen(i)
    plot(c(0, 1), c(0, 1), type = "n")
}
for (i in 1:2) {
    for (j in 1:2) {
        screen(2*(i - 1) + j)
        text(0.5, 0.5, labels = paste("(", i, ",", j, ")"))
    }
}


If you REALLY want to revisit previous drawing, you might need to look at 
{grid} viewports, which are designed to allow you to get back to the original 
drawing context ...


library(grid)
grid.newpage()
pushViewport(viewport(layout=grid.layout(2, 2)))
for (i in 1:2) {
    for (j in 1:2) {
        pushViewport(viewport(layout.pos.row=i, layout.pos.col=j,
                              name=paste0(i, j)))
        grid.rect(width=.8, height=.8)
        upViewport()
    }
}
for (i in 1:2) {
    for (j in 1:2) {
        downViewport(paste0(i, j))
        grid.text(paste("(", i, ",", j, ")"))
        upViewport()
    }
}


Paul


On 13/11/25 07:28, Naresh Gurbuxani wrote:
After drawing multiple figures, I want to select an earlier figure to add some 
low level commands.  Using mfg parameter runs all commands in the most recent 
figure only.  How can an earlier figure be selected?
Thanks,
Naresh
par(mfrow = c(2, 2))
for (i in 1:4) plot(c(0, 1), c(0, 1), type = "n”)
for (i in 1:2) {for (j in 1:2) text(0.5, 0.5, labels = paste("(", i, ",", j, 
")"), mfg = c(i, j, 2, 2))}
#All text is in bottom right figure only
______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

--
Dr Paul Murrell (he/him)
Te Kura Tatauranga | Department of Statistics
Waipapa Taumata Rau | The University of Auckland
Private Bag 92019, Auckland 1142, New Zealand
64 9 3737599 x85392
[email protected]
www.stat.auckland.ac.nz/~paul/


--
Dr Paul Murrell (he/him)
Te Kura Tatauranga | Department of Statistics
Waipapa Taumata Rau | The University of Auckland
Private Bag 92019, Auckland 1142, New Zealand
64 9 3737599 x85392
[email protected]
www.stat.auckland.ac.nz/~paul/

______________________________________________
[email protected] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to