Weismann_D at medizin.uni-wuerzburg.de
2006-May-16 02:19 UTC
[R] multiple plots in a function()
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]]
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
>
>
Hello, I am new to R and want to use it for some statistical tests. Before the tests, I want to visualize my data with pairwise scatterplots using "pairs(myData)". To analyse it by eye, I would like to draw the function f(x)=y into each of the scatterplot panels. Unfortunately I get lost when I try to figure it out by reading "help(pairs)". Can anyone help me or point me to a nice tutorial about graphics? Regards, Harald -- Harald Stepputtis University of Freiburg, Plant Biotechnology Sch?nzlestr. 1, D-79104 Freiburg Fon: +49 761 203-6960 Fax: +49 761 203-6990 e-mail: Harald.Stepputtis at biologie.uni-freiburg.de homepage: http://www.plant-biotech.net/
Weismann_D at medizin.uni-wuerzburg.de
2006-May-20 15:33 UTC
[R] multiple plots in a function()
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
>