Re: [R] multiple plots in a function()

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sun 21 May 2006 - 01:47:28 EST

Read through this thread for some sample code:

https://www.stat.math.ethz.ch/pipermail/r-help/2005-May/072462.html

On 5/20/06, Weismann_D@medizin.uni-wuerzburg.de <Weismann_D@medizin.uni-wuerzburg.de> wrote:
> Sorry for again asking the same question, but I am still not successfull, also after using grid-package, as recommended previously:
>
> I want to write a function() which generates a graphical output and can be used in a loop to produce several results with a layout like in
>
> par(mfrow=c(5,5))
> for ( i in 1:10){
> plot(1:10)
> }
>
> Here is the (experimental) code:
>
>
> myfunction <- function(){
> vp1 <- viewport(x=0.1, y=.7, w=.8, h=.2, just="left", name="vp1")
> vp2 <- viewport(x=.1, y=.5, w=.8, h=.2, just="left", name="vp2")
> pushViewport(vp1)
> grid.rect(gp=gpar(col="grey"))
> grid.text("vp1")
> grid.xaxis(main=FALSE)
> upViewport()
> pushViewport(vp2)
> grid.rect(gp=gpar(col="grey"))
> grid.text("vp2")
> grid.xaxis()
> }
>
>
> And the following loop:
>
>
> par(mfrow=c(5,5))
> for (i in 1:10) {
> grid.newpage() # when ommitting this line, the following plots will be plotted as childrens of the afore generated parent
> myfunction()
> }
>
>
> In conclusion, every myfunction() result overwrites the output of the previous output and is not plotted side by side as intended.
>
> What to change?
>
> Thanks a lot, Dirk
>
> Dr.med. D. Weismann
> Schwerpunkt Endokrinologie/Diabetologie
> Medizinische Klinik und Poliklinik I
> Universität Würzburg
> Josef-Schneider-Str. 2
> 97080 Würzburg
> email: weismann_d@klinik.uni-wuerzburg.de
> Telefon: 0931/201-1
>

>
>
> -----Ursprüngliche Nachricht-----
> Von: Gabor Grothendieck [mailto:ggrothendieck@gmail.com]
> Gesendet: Mi 17.05.2006 03:19
> An: Weismann, Dirk
> Cc: PAlspach@hortresearch.co.nz; jim@bitwrit.com.au
> Betreff: Re: [R] multiple plots in a function()
>
> Use grid graphics
> http://www.stat.auckland.ac.nz/~paul/grid/grid.html
> and the gridbase package to incorporate classic
> graphics in that.
>
> On 5/16/06, Weismann_D@medizin.uni-wuerzburg.de
> <Weismann_D@medizin.uni-wuerzburg.de> wrote:
> > Thanks a lot, but my problem is not to get a temporary change with par()in myfunction and return to 'oldpar'after finishing. What I want is, that the output of myfunction is handled like one graphic (ie one plot) and therefore I can get the output of myfunction 10times side by side in one window (e.g. mfrow=c(5,5)). But the 'par(mfrow=c(1,2))' inside 'myfunction' makes this impossible.
> > I used plot(..,type="n")two times to initialize the graphics in 'myfunction' and filled both with a lot of low-level graphic code. Since I always need both graphical outputs to interpret the results, I prefer to write one function instead of two for each plot. This might not be the best way to create a graphical output in a function, but how to do it better?
> >
> > Thanks, Dirk
> >
> > -----Ursprüngliche Nachricht-----
> > Von: r-help-bounces@stat.math.ethz.ch [mailto:r-help-bounces@stat.math.ethz.ch] Im Auftrag von Gabor Grothendieck
> > Gesendet: Dienstag, 16. Mai 2006 05:01
> > An: Weismann, Dirk
> > Cc: r-help@stat.math.ethz.ch
> > Betreff: Re: [R] multiple plots in a function()
> >
> > You could override par by optionally passing it as an argument:
> >
> > f <- function(x = 1:10, y = 1:10, par = list(mfrow = c(2,2))) {
> > if (!is.null(par)) {
> > on.exit(par(opar))
> > opar <- par(par)
> > }
> > plot(x)
> > plot(y)
> > }
> >
> > opar <- par(mfrow=c(4,4))
> > for(i in 1:8) f(par = NULL)
> > par(opar)
> >
> >
> >
> > On 5/15/06, Weismann_D@medizin.uni-wuerzburg.de
> > <Weismann_D@medizin.uni-wuerzburg.de> wrote:
> > > Dear all,
> > > I have the following problem:
> > > I have written a function genereating to plots, eg myfunction <-
> > > (data, some.parameters) {
> > > #some calculations etc
> > > .
> > > par (mfrow=c(1,2))
> > > plot1(......)
> > > plot2(.....)
> > > }
> > > which works fine. But for analysing several variants, I tried a slope, eg:
> > >
> > > par (mfrow=c(5,5))
> > > for ( i in 1:10) {
> > > myfunction(data, i)
> > > }
> > >
> > > Off course, the par() in myfunction overwrites the par() before the slope. So, how to write myfunction, that it plots two plots and can be used in the slope like in the example?
> > >
> > > Thanks a lot, Dirk
> > >
> > > Dr.med Dirk Weismann
> > > Schwerpunkt für Endokrinologie und Diabetologie Medizinische
> > > Universitätsklinik I 97080 Würzburg
> > > email: weismann_d@klinik.uni-wuerzburg.de
> > > Telefon: 0049-931-201-36744
> > >
> > > [[alternative HTML version deleted]]
> > >
> > >
> > >
> > > ______________________________________________
> > > R-help@stat.math.ethz.ch mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide!
> > > http://www.R-project.org/posting-guide.html
> > >
> > >
> >
> > ______________________________________________
> > R-help@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> >
>
>



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sun May 21 01:58:32 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sun 21 May 2006 - 22:10:14 EST.

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