[R] problem: howto see ylim (or equivalent) within a custom panel function

Dan Kortschak dan.kortschak at adelaide.edu.au
Tue Nov 24 01:23:48 CET 2009


Hello,

I am plotting a set of data where subsets are of different length and
not all sites are noted in the data sets. To indicate the extent of
sites, I am marking this with a line on the xyplot being produced:

require(lattice)
lengths<-as.integer(runif(10)*100)
results <- matrix(ncol=3)
for (i in 1:10) {
   gap <- 1-runif(1)/10
   pos <- 1:as.integer(lengths[i]*gap)
   seq <- rep.int(i,as.integer(lengths[i]*gap))
   freq <- rgamma(as.integer(lengths[i]*gap), 1)
   results <- rbind(results, cbind(pos, seq, freq))
}
results <- as.data.frame(results)
panel.xyextent <- function(x, y, ...) {
   panel.xyplot(x, y, ...)
   panel.lines(c(0, lengths[panel.number()]), c(0,0), col="red")
}
xyplot(freq~pos | seq, layout=c(1,5,2), data=results,
   panel=panel.xyextent)

I would like the hairline to be placed below the origin, by some factor
of ylim or 'max(x for all seq)' (a number of datasets have different max
values - I have not included this in the example - so a constant offset
results in different placement between datasets). I'm not sure where to
start with this.

Also, I am sure that the example setup above is not the best way to put
all the values into results. I imagine that one of the *apply functions
would be appropriate, but I'm not sure how. Can anyone comment on this?

thank you
Dan




More information about the R-help mailing list