Re: [R] add lines() to 1st plot in layout() after calling 2nd plot()?

From: baptiste auguie <baptiste.auguie_at_googlemail.com>
Date: Sun, 04 Oct 2009 11:50:25 +0200

After some checking, I think the documentation is at best misleading on this particular query. Nowhere could I find mention that par(mfg) can work with layout. Instead, I found a warning that suggests incompatibility (since mpg is explicitly tied to mfrow in ?par and layout is said incompatible with par(mfrow)).

Relevant bits from "?par":
mfcol, mfrow
Consider the alternatives, layout and split.screen.

mfg
A numerical vector of the form c(i, j) where i and j indicate which figure in an array of figures is to be drawn next (if setting) or is being drawn (if enquiring). The array must already have been set by mfcol or mfrow.

>From "?layout",

Warnings
These functions are totally incompatible with the other mechanisms for arranging plots on a device: par(mfrow), par(mfcol) and split.screen.

See Also
par with arguments mfrow, mfcol, or mfg.

I suggest the following changes,

in ?layout, section "Details": "The user can navigate to a given cell using the the mpg parameter (see ?par)."

in ?par, parameter "mpg": "The array must already have been set by either mfcol, mfrow, or layout."

It may be that I missed an important incompatibility in complicated layouts, but it seems to work at least for simple ones.

Best regards,

baptiste

2009/10/4 baptiste auguie <baptiste.auguie_at_googlemail.com>:
> Hi,
>
> Try this,
>
> dev.new()
> layout(matrix(1:4,2, by=T))
>
> plot(1:10,main="top left plot")
> plot(1:10,main="top right plot")
> plot(1:10,main="bottom left plot")
> plot(1:10,main="bottom right plot")
>
> for (ii in 1:2){
> for (jj in 1:2){
> par(mfg=c(ii,jj))
> text(5,2, lab=paste("plot #:",ii,",",jj,sep=""))

> }
> }
> par(mfg=c(1,1))
> lines(c(3:7,7:3),col="red")
>
> HTH,
>
> baptiste
> 2009/10/4 Marianne Promberger <marianne.promberger_at_kcl.ac.uk>:
>> Thanks for the quick reply. However ...
>>
>> David Winsemius <dwinsemius@comcast.net> 03-Oct-09 20:50:
>> MP> layout(matrix(c(1,2),1))
>> MP> plot(1:10,main="left plot")
>> MP> plot(10:1,main="right plot")
>> MP> lines(c(3:7,7:3),col="red")
>> MP>
>> MP> but of course now lines() gets added to the "right plot". I
>> MP>
>> MP> Is there any way to make the lines() go to the fist plot ("left
>> MP> plot")?
>>>
>>> If you look at layout's help page there appears to be a worked example
>>> of an even more complex task. The answer appears to be assingning
>>> numbers to regions and then inserting par(mar=  with an appropriately
>>> constructed destination arguments prior to each added piece.
>>
>> Sorry, but I fail to find the solution in the page returned by
>> ?layout, assuming that's what you mean.
>>
>> Yes, the numbers in the matrix given to layout() give the order of
>> where plots will be put, so
>>
>> layout(matrix(c(2,1),1))
>>
>> then
>>
>> plot(1:10,main="left plot")
>> plot(10:1,main="right plot")
>> lines(c(3:7,7:3),col="red")
>>
>> puts "left plot" on the right hand side and "right plot" on the
>> left. But the lines() still go to the "right plot" plot (now on the
>> left hand side) which gets called last.
>>
>> The par(mar ... of the "scatterplot with marginal histograms" example
>> just set the margins of the histogram plots, then they get plotted to
>> the region with the next number given in the layout() matrix.
>>
>> Maybe I'm missing something.
>>
>> Thanks,
>>
>> Marianne
>>
>>>
>>> --
>>> David
>>>
>>> On Oct 3, 2009, at 3:15 PM, Marianne Promberger wrote:
>>>
>>>> Dear R users,
>>>>
>>>> I create a graphic with two plots side by side using layout(), like
>>>> this:
>>>>
>>>> layout(matrix(c(1,2),1))
>>>> plot(1:10,main="left plot")
>>>> lines(c(3:7,7:3),col="red")
>>>> plot(10:1,main="right plot")
>>>>
>>>> The lines() obivously get added to the "left plot" plot.
>>>>
>>>> Now, I'm trying to write a function that builds up a plot bit by bit
>>>> to
>>>> then include it in a LaTeX presentation with overlays. I'm using
>>>> dev.copy(), and it would make my life much easier (because in fact I
>>>> call all sorts of additional axis() etc after plot) if I could call
>>>> the above commands in this order:
>>>>
>>>> layout(matrix(c(1,2),1))
>>>> plot(1:10,main="left plot")
>>>> plot(10:1,main="right plot")
>>>> lines(c(3:7,7:3),col="red")
>>>>
>>>> but of course now lines() gets added to the "right plot". I
>>>>
>>>> Is there any way to make the lines() go to the fist plot ("left
>>>> plot")?
>>>>
>>>> Marianne
>>>>
>>>
>>> David Winsemius, MD
>>> Heritage Laboratories
>>> West Hartford, CT
>>>
>>> ______________________________________________
>>> R-help_at_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.
>>
>> --
>> Marianne Promberger PhD, King's College London
>> http://promberger.info
>> R version 2.9.2 (2009-08-24)
>> Ubuntu 9.04
>>
>> ______________________________________________
>> R-help_at_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.
>>
>



R-help_at_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. Received on Sun 04 Oct 2009 - 09:58:24 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sun 04 Oct 2009 - 20:14:29 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive