[R] multiple plots in a function()
Gabor Grothendieck
ggrothendieck at gmail.com
Sun May 21 12:41:35 CEST 2006
It seems that the thread is continued in the next
month and there it got broken up into multiple threads so search
for "problem going" to locate all the messages in:
https://stat.ethz.ch/pipermail/r-devel/2005-June/thread.html#start
On 5/20/06, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> 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 at medizin.uni-wuerzburg.de
> <Weismann_D at 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 at klinik.uni-wuerzburg.de
> > Telefon: 0931/201-1
> >
> >
> >
> > -----Ursprüngliche Nachricht-----
> > Von: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> > Gesendet: Mi 17.05.2006 03:19
> > An: Weismann, Dirk
> > Cc: PAlspach at hortresearch.co.nz; jim at 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 at medizin.uni-wuerzburg.de
> > <Weismann_D at 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 at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch] Im Auftrag von Gabor Grothendieck
> > > Gesendet: Dienstag, 16. Mai 2006 05:01
> > > An: Weismann, Dirk
> > > Cc: r-help at 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 at medizin.uni-wuerzburg.de
> > > <Weismann_D at 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 at klinik.uni-wuerzburg.de
> > > > Telefon: 0049-931-201-36744
> > > >
> > > > [[alternative HTML version deleted]]
> > > >
> > > >
> > > >
> > > > ______________________________________________
> > > > R-help at 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 at 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
> > >
> >
> >
>
More information about the R-help
mailing list