[R] adding line to spinogram

Achim Zeileis Achim.Zeileis at wu-wien.ac.at
Tue May 16 20:09:14 CEST 2006


On Tue, 16 May 2006 17:42:22 +0100 Viktor Tron wrote:

> Hello,
> Thanks for the hint.
> grid.segments seemed the closest I got.
> I did manage to draw (well fake) a line with it. I can only address
> the whole drawing frame, which means I can only adjust the position
> and length of the line
> by trial and error. I see no way to address the y axis scale of my  
> spinogram/histogram.
> Is there a way?

Yes, that's the wonderful thing about grid!

Consider this example with data from vcd
  spine(Fail ~ Temperature, data = SpaceShuttle)
Then you can look at the viewport tree in which you can navigate:
  current.vpTree()
which leaves you here only with the ROOT node, hence you had troubles
adjusting your lines. But looking at ?spine reveals that
  spine(Fail ~ Temperature, data = SpaceShuttle, pop = FALSE)
does *not* pop away the viewport tree which is here relatively simple
  current.vpTree()
just shows "viewport[ROOT]->(viewport[spineplot])".

So you can hop into the main picture
  seekViewport("spineplot")
(which you can also name differently) and do more or less sensible
things, e.g.
  grid.rect(gp = gpar(col = 2))
adds a red box around the plot or
  grid.lines(c(0, 1), c(0.3, 0.7), gp = gpar(col = 4))
adds a blue line. Note that both x- and y-axis are on a probability
scale, i.e., it plots P(Temperature <= x) vs. P(Fail = "no"). 

To see a more elaborated example how these graphics can be re-used,
look at example(mob) in library("party").

Best,
Z

> Not a huge problem, but I thought someone must have thought of
> adding lines to their spinograms or histograms before...
> V
> 
> 
> On Mon, 15 May 2006 14:13:00 +0100, Prof Brian Ripley  
> <ripley at stats.ox.ac.uk> wrote:
> 
> > Package vcd is built on grid, not base graphics.
> >
> > On Mon, 15 May 2006, Viktor Tron wrote:
> >
> >> Dear all,
> >> I wonder what's special about spinograms {vcd} that prevents me
> >> from using
> >> it the way I do with other plots.
> >>
> >> I do:
> >>
> >>> spine(f.speaker.identity ~ x.log.lengthening,
> >>> data=ms,breaks=45,gp=gpar(fill=c("red","green")),xlab="length  
> >>> difference
> >>> (log ms)",ylab="speaker")
> >>> curve(0*x,add=T)
> >> Error in plot.xy(xy.coords(x, y), type = type, col = col, lty =
> >> lty, ...) :
> >> 	plot.new has not been called yet
> >>
> >>
> >> OK, if I do
> >>> curve(0*x,add=)
> >>> spine(f.speaker.identity ~ x.log.lengthening,
> >>> data=ms,breaks=45,gp=gpar(fill=c("red","green")),xlab="length  
> >>> difference
> >>> (log ms)",ylab="speaker")
> >>> curve(0*x,add=T)
> >>
> >> then the plot is what I want, but note that I had to use y=0 to
> >> get the line put at 0.5!!!! so it is already suspicious.
> >> But then:
> >>
> >>> dev.print(pdf,"mde_speakerration_by_lengthening.pdf")
> >> Error in dev.copy(device = function (file = ifelse(onefile,  
> >> "Rplots.pdf",
> >> :
> >> 	invalid graphics state
> >>
> >> Can anyone suggest a remedy?
> >
> > Use grid primitives to add to the plot.
> >
> 
> ______________________________________________
> 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