[R] Adding different output to different lattice panels

Deepayan Sarkar deepayan.sarkar at gmail.com
Thu Jun 28 23:47:12 CEST 2007


On 6/28/07, Alexandre Salvador <alxsal at free.fr> wrote:
> Selon deepayan.sarkar at gmail.com:
>
> > On 6/28/07, alxsal at free.fr <alxsal at free.fr> wrote:
> > > I would like to add a reference line to lattice graphs, with the reference
> > > line
> > > being different according to the factor level.
> > >
> > > Example : Draw 3 dotplots for "a","b" and "c" factors, and then add an
> > > horizontal line at y=10 for panel "a", y=8 for panel "b" and y=6 for panel
> > > "4"
> > >
> > > I tried the code below, but this draw all three reference lines for each
> > > panel.
> > > How do I index the current panel to chose the right reference vector value
> > ?
> > >
> > >
> >
> dat<-data.frame(id=rep(c("a","b","c"),4),val=1:12,quand=rep(c("t1","t2","t3","t4"),each=3))
> > > ref<-c(10,8,6)
> > > plot.new()
> > > datplot<-dotplot(val~quand|id,data=dat,panel=function(...){
> > > panel.dotplot(...)
> > > panel.abline(h=ref)
> > > })
> > > print(datplot)
> >
> > dotplot(val~quand|id,data=dat,panel=function(...){
> >     panel.dotplot(...)
> >     panel.abline(h = ref[packet.number()])
> > })
> >
> > (Things are more complicated if you have more than one conditioning
> > variable.)
> >
> > -Deepayan
> >
>
> I tried you solution, but the following error appears when I print(datplot):
>
>    Erreur dans as.numeric(h) : impossible de trouver la fonction "packet.number"
>
> I have lattice and grid libraries loaded. The exact code I use is
> datplot<-dotplot(val~quand|id,data=dat,panel=function(...){
> panel.dotplot(...)
> panel.abline(h=ref[packet.number()])
> })
> print(datplot)
> What do I do wrong ?

You are using a very old version of R (or at least old enough that the
packet.number number didn't exist). You haven't told us what version
you are using.

I would encourage you to upgrade, but this might work for now:

dotplot(val~quand|id,data=dat,
        panel=function(..., panel.number){
            panel.dotplot(...)
            panel.abline(h = ref[panel.number])
})

> Note : I usually need to use the indirect datplot<-dotplot(...  and then
> print(datplot) when I store my code in a file and use it through
> source("myfile.R"). The direct dotplot(... does not open a device whereas it
> does if I type directly dotplot(... at the R command line...
> Is this normal ?

Yes, and a FAQ:

http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f

-Deepayan



More information about the R-help mailing list