Hello,
Thanks, that makes sense. So don't use par(no.readonly = TRUE) unless
that's the desired behavior.
Rui Barradas
Às 20:00 de 02/04/2022, Bill Dunlap escreveu:
par("mfrow") works by updating par("fig") before each plot. I think
that when you reset all the par values after each plot you reset
par("fig") to the value it had before you made the last plot.
-Bill
On Sat, Apr 2, 2022 at 10:45 AM Rui Barradas <ruipbarra...@sapo.pt
<mailto:ruipbarra...@sapo.pt>> wrote:
Hello,
I have a function using base graphics that changes some graphics
parameters, then plots what it has to plot, then on exit puts the
graphics parameters back as they were.
The problem is that if outside the function the graphics parameters are
also changed, for instance mfrow, those chages are not respected by the
function. This seems to come from the way the graphics pars are saved.
After par(mfrow = c(2, 1))
- if I call par(no.readonly = TRUE) then the second call to the
function
plots in the 1st row, it overplots what was plotted before.
- if I save the pars when they are changed, all is well.
Here is a reproducible example.
f <- function(x, ...) {
old_par <- par(no.readonly = TRUE) # this is the problem
par(mar = c(4.1, 3.1, 3.1, 1.1)) # or maybe here
on.exit(par(old_par))
barplot(x, ...)
}
g <- function(x, ...) {
old_par <- par(mar = c(4.1, 3.1, 3.1, 1.1)) # this is the solution
on.exit(par(old_par))
barplot(x, ...)
}
set.seed(2022)
b1 <- table(sample(4, 100, TRUE))
b2 <- table(sample(10, 100, TRUE))
# 1st function, unexpected behavior
old_par <- par(mfrow = c(2, 1))
f(b1, main = "1st plot")
f(b2, main = "2nd plot")
par(old_par)
# 2nd function, all is well
old_par <- par(mfrow = c(2, 1))
g(b1, main = "1st plot")
g(b2, main = "2nd plot")
par(old_par)
If I print(old_par) in any of the functions the result is the right
mfrow setting, so I would expect the 2nd call to f() to plot in the 2nd
row. But it doesn't.
Function f() calls par() twice but it only changes a parameter
unrelated
to the parameter set outside the function.
I'm obviously making a mistake but I don't know what. Is this expected
(or a par() bug)?
Thaks in advance,
Rui Barradas
______________________________________________
R-help@r-project.org <mailto:R-help@r-project.org> mailing list --
To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
<https://stat.ethz.ch/mailman/listinfo/r-help>
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
<http://www.R-project.org/posting-guide.html>
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.