[R] reset par() within plot layout

1 view
Skip to first unread message

Janke ten Holt

unread,
Oct 23, 2009, 8:26:37 AM10/23/09
to r-h...@r-project.org
Dear list,

I would like to produce a matrix of plots, where par() is reset after
each plot (see below [simplified] example). When I use layout() to do
so, I seem to also reset the layout. I have not been able to figure out
how to prevent this from happening.

Any help is greatly appreciated!
Janke

Example code:
#Desired result is a layout of 2 plots: one red and one black
layout(matrix(1:2, nr=2))
par.ini <- par(no.readonly=TRUE)
par(col="red")
plot(1:100)

par(par.ini)

plot(1:10)

------------------
Janke ten Holt
Dept. of Psychology/Sociology
University of Groningen, the Netherlands

______________________________________________
R-h...@r-project.org mailing list
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.

stephen sefick

unread,
Oct 23, 2009, 8:35:09 AM10/23/09
to Janke ten Holt, r-h...@r-project.org
Maybe something like this?

#Desired result is a layout of 2 plots: one red and one black

par(mfrow=c(2,1))

par(col="red")
plot(1:100)

par(col="black")
plot(1:10)

--
Stephen Sefick

Let's not spend our time and resources thinking about things that are
so little or so large that all they really do for us is puff us up and
make us feel like gods. We are mammals, and have not exhausted the
annoying little problems of being mammals.

-K. Mullis

Janke ten Holt

unread,
Oct 23, 2009, 8:50:51 AM10/23/09
to stephen sefick, r-h...@r-project.org
OK, maybe I oversimplified the example, because you are of course correct...

I am working on a function, which I feed data to plot in layouts of
specified dimensions. I want to be able to set any par() variables for
each plot in the layout. Because the next plot does not know which par()
variables were changed in the previous plot, I want to reset all par()
variables after each plot, rather than simply change back one specific
par() variable.
So I really need to reset par() without 'messing with' my layout.

Tom Gottfried

unread,
Oct 23, 2009, 10:00:53 AM10/23/09
to Janke ten Holt, R-help
Janke,

Janke ten Holt schrieb:


> Dear list,
>
> I would like to produce a matrix of plots, where par() is reset after
> each plot (see below [simplified] example). When I use layout() to do
> so, I seem to also reset the layout. I have not been able to figure out
> how to prevent this from happening.
>
> Any help is greatly appreciated!
> Janke
>
> Example code:
> #Desired result is a layout of 2 plots: one red and one black
> layout(matrix(1:2, nr=2))
> par.ini <- par(no.readonly=TRUE)

look at par.ini: it's a list with all the argument-value pairs for par(). You might be able to solve
your problem by removing the appropriate elements from par.ini before calling par(par.ini). Do the
following to look which ones need to be kept for the layout:

par()
layout(matrix(1:2, nr=2))
par()

Tom

Janke ten Holt

unread,
Oct 23, 2009, 10:17:58 AM10/23/09
to Tom Gottfried, R-help

Yes, that had occured to me too. So I tried:

layout(matrix(1:2, nr=2))
par(no.readonly=TRUE)
plot(1:10)
par(no.readonly=TRUE)

This has differences in
fig
mfg
usr
xaxp
yaxp

But even keeping these back does not solve my problem. So I figured
there must be something else going on that I am unaware of...

btw, your exact suggestion,


> par()
> layout(matrix(1:2, nr=2))
> par()

does not result in any differences.

Peter Ehlers

unread,
Oct 23, 2009, 11:15:18 AM10/23/09
to Janke ten Holt, R-help

I think that what you want is

layout(matrix(1:2, nr=2))
opar <- par(col="red")
plot(1:100)
par(opar)
plot(1:10)

-Peter Ehlers

> btw, your exact suggestion,
>> par()
>> layout(matrix(1:2, nr=2))
>> par()
> does not result in any differences.
>
> ______________________________________________
> R-h...@r-project.org mailing list
> 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.
>
>

______________________________________________

Tom Gottfried

unread,
Oct 24, 2009, 12:23:07 PM10/24/09
to r-h...@r-project.org
I think it would be much easier to use grid-graphics for your task.
It's made for such things.

This is a good introduction:
Paul Murrell. The grid graphics package. R News, 2(2):14-19, June 2002

Tom

Janke ten Holt

unread,
Oct 27, 2009, 6:16:47 AM10/27/09
to Peter Ehlers, R-help

This seems to work indeed. But I don't understand why... I would think
that opar contains the par settings, including the col="red", but I
guess it doesn't. I will look into par's behaviour some more...
Thank you!

Janke

Janke ten Holt

unread,
Oct 27, 2009, 6:19:20 AM10/27/09
to Tom Gottfried, r-h...@r-project.org
Tom Gottfried wrote:
> I think it would be much easier to use grid-graphics for your task. It's
> made for such things.
>
> This is a good introduction:
> Paul Murrell. The grid graphics package. R News, 2(2):14-19, June 2002
>
Thank you for your suggestion. I will certainly check it out.

Janke

baptiste auguie

unread,
Oct 27, 2009, 6:44:39 AM10/27/09
to Janke ten Holt, R-help
Hi,

>From ?par,

"Value

When parameters are set, their former values are returned in an
invisible named list."

Therefore opar <- par(col="red") will not contain col="red".

HTH,

baptiste


2009/10/27 Janke ten Holt <j.c.te...@rug.nl>:


> This seems to work indeed. But I don't understand why... I would think
> that opar contains the par settings, including the col="red", but I
> guess it doesn't. I will look into par's behaviour some more...
> Thank you!
>
> Janke
>> -Peter Ehlers
>>

______________________________________________

Janke ten Holt

unread,
Oct 27, 2009, 8:01:16 AM10/27/09
to baptiste auguie, R-help
baptiste auguie wrote:
> Hi,
>
>>From ?par,
>
> "Value
>
> When parameters are set, their former values are returned in an
> invisible named list."
>
Wow, I must have missed that. Thanks,
Janke
Reply all
Reply to author
Forward
0 new messages