[R] xyplot 3 panels 3 different Y variables

Gabor Grothendieck ggrothendieck at gmail.com
Fri Feb 5 00:15:58 CET 2010


As these are time series you can use plot.ts, plot.zoo or xyplot.zoo:

tt <- ts(JUNK[-1])
plot(tt)

library(zoo)
z <- zoo(JUNK[-1], JUNK[,1])
plot(z)

library(lattice)
xyplot(z)


On Thu, Feb 4, 2010 at 5:30 PM, Jacob Wegelin <jacobwegelin at fastmail.fm> wrote:
>
> Often, when exploring a dataset, I'd like to plot several very different Y
> variables against the same X variable, in panels stacked one over the other.
> Is there an easy way to do this?
>
> I'd like to achieve an elegant look similar to the look achieved by lattice
> in conditioned plots--for instance no space between panels. But unlike in
> straightforward conditioned plot, each panel may be on a different scale.
>
> Example.
>
>        •       Plot Estrogen, Creatinine, and their ratio; all by the same
> predictor variable (say, Day).
>
>                Or: In a longitudinal study of hormones in reproductive-age
> women, plot progesterone, estradiol, testosterone, luteinizing hormone,
> follicle-stimulating hormone, and thyroid-stimulating hormone all on one
> page, parallel. Note that several of these variables are measured in
> different units.
>
>        •       One panel for each outcome variable, arranged one above the
> other.
>
>        •       Minimal vertical space between the panels.
>
> To make this concrete, let's generate toy data:
>
> N<-40
> set.seed(5234767)
> JUNK<-data.frame(Day=1:N)
> JUNK$Creatinine<-exp(2*rnorm(nrow(JUNK)))
> JUNK$Estrogen<- (sin(JUNK$Day/pi) + 2.5) * ( exp(2*rnorm(nrow(JUNK))) *
> JUNK$Creatinine )
> JUNK$Creatinine[10]<-0.0001
> JUNK$Ratio<- JUNK$Estrogen / JUNK$Creatinine
>
> The following traditional graphics commands put an annoying wide space
> between the "panels" by default. Also, the X ticks are repeated
> unnecessarily.
>
> par(mfrow=c(3,1))
> par(oma=c(0,0,1,0))
> plot(JUNK$Day, JUNK$Estrogen, xlab="", ylab="Estrogen", type="o")
> plot(JUNK$Day, JUNK$Creatinine, xlab="", ylab="Creatinine", type="o")
> plot(JUNK$Day, JUNK$Ratio, xlab="Day", ylab="Ratio", type="o")
>
> The following lattice approach gives a kinda nice-looking end product, but
> seems so counterintuitive that I want to call it a workaround.  For
> instance, it generates a "time" variable that actually is a category.  And
> the variable names are converted into the levels of a factor by hand, so
> that the process is susceptible to human error.
>
> Also, the Y variables are not labeled on the axes, only in the strip.  This
> is not ideal.
>
> JUNK2<-JUNK
> names(JUNK2)[names(JUNK2)=="Creatinine"]<-"Y.1"
> names(JUNK2)[names(JUNK2)=="Estrogen"]<-"Y.2"
> names(JUNK2)[names(JUNK2)=="Ratio"]<-"Y.3"
> JUNKlong<- reshape(JUNK2,  dir="long", varying=2:4)
> JUNKlong$outcome<-factor( JUNKlong$time, levels=1:3, labels=c("Creatinine",
> "Estrogen", "Ratio") )
> JUNKlong$time<-NULL
> library(lattice)
> xyplot( Y ~ Day | outcome, data=JUNKlong, layout=c(1,3), type="o",
> scales=list(x=list(alternating=3), y=list(relation="free", alternating=3)),
> ylab="")
>
> Am I making this harder than it needs to be?
>
> Thanks
>
> Jacob A. Wegelin
> Assistant Professor
> Department of Biostatistics
> Virginia Commonwealth University
> 730 East Broad Street Room 3006
> P. O. Box 980032
> Richmond VA 23298-0032
> U.S.A.
> ______________________________________________
> 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.
>
>



More information about the R-help mailing list