[R] xyplot and lsegments
Deepayan Sarkar
deepayan.sarkar at gmail.com
Fri Feb 8 18:46:15 CET 2008
On 2/8/08, Alex Brown <fishtank at compsoc.man.ac.uk> wrote:
> Hi,
>
> How might I use xyplot to plot segments where the segments are in the
> input data? (ie a directed acyclic forest).
>
> Here's an example in base graphics:
>
> n = data.frame(id = c(1,2,3,4), parent = c(0,1,2,2), value =
> c(5,5.5,7,3), date = c(1,2,3,3.5))
>
> plot(n$date, n$value)
>
> do.call(
> segments,
> with(
> merge(n,n,by.x="parent", by.y="id"),
> data.frame(x0=date.x, y0=value.x, x1=date.y, y1=value.y)
> )
> )
>
> xyplot only seems to take an x and a y, and panels only seem to get x
> and y.
>
> I can see an lsegments, but I can't see how to use it in this example.
The direct translation would be
xyplot(value ~ date, data = n,
data.lines = merge(n,n,by.x="parent", by.y="id"),
panel = function(x, y, data.lines, ...) {
panel.xyplot(x, y, ...)
with(data.lines,
lsegments(x0=date.x, y0=value.x,
x1=date.y, y1=value.y))
})
(lsegments seems unable to work with a list currently, so that part is
slightly different.)
Things would be a bit more interesting if you had a multipanel plot,
in which case you would need a more general solution involving
subscripts.
-Deepayan
More information about the R-help
mailing list