Hello (R-)Experts I hope someone can help with this problem concerning axis annotation of a lattice shingle plot. I want a plot with three shingles to display some laboratory value over time. In the first panel over the first few days, then in the next panel some months, and in the last panel some years. In the following minimal example the axis annotation will be in days, but I'd like to have days in the fisrt panel, months in the second panel and years in the third panel. Is it possible? pod <- seq(1, 5000, 5) test <- data.frame(pod=pod, val=rep(c(1,2,4,8), length=length(pod)), g=rep(c('A', 'B'), length=length(pod))) shingle.pod <- shingle(test$pod, intervals = rbind(c(0, 20), c(20, 180), c(220, 6000))) test.plot <- xyplot(val ~ pod | shingle.pod, data = test, groups = test$g, scales = list(x = "free", y = list(relation = "same", log = 2)), between = list(x = 0.5), panel = function(x, y, ...) { panel.grid(h = -1, v = -1, lwd = 1) panel.superpose(x, y, ...) }, type = c('b') ) plot(test.plot) (this plot doesn't look good, I know, it's just and example) Thank you -- Armin Goralczyk -- http://www.gwdg.de/~agoralc
Hi, Chapter 8 of the lattice book has some examples (you can see the code and figures on r-forge). Perhaps you could try something like this, d = data.frame(x=1:10,y=1:10,f=sample(letters[1:2],10,repl=T)) axis.custom = function(side, ...){ if(side == "bottom") switch(panel.number(), '1' = panel.axis(side="bottom",outside=TRUE, at = c(4,6)), '2' = panel.axis(side="bottom",outside=TRUE, at = c(2,8), labels=letters[1:2], rot=rep(0,2))) } xyplot(y~x|f, d, axis=axis.custom) HTH, baptiste 2009/7/30 Armin Goralczyk <agoralczyk at gmail.com>:> Hello (R-)Experts > > I hope someone can help with this problem concerning axis annotation > of a lattice shingle plot. I want a plot with three shingles to > display some laboratory value over time. In the first panel over the > first few days, then in the next panel some months, and in the last > panel some years. In the following minimal example the axis annotation > will be in days, but I'd like to have days in the fisrt panel, months > in the second panel and years in the third panel. Is it possible? > > pod <- seq(1, 5000, 5) > test <- data.frame(pod=pod, > ? ? ? ? ? ? ? ? ? val=rep(c(1,2,4,8), length=length(pod)), > ? ? ? ? ? ? ? ? ? g=rep(c('A', 'B'), length=length(pod))) > shingle.pod <- shingle(test$pod, intervals = rbind(c(0, 20), c(20, 180), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(220, 6000))) > test.plot <- xyplot(val ~ pod | shingle.pod, > ? ? ? ? ? ? ? ? ? ?data = test, > ? ? ? ? ? ? ? ? ? ?groups = test$g, > ? ? ? ? ? ? ? ? ? ?scales = list(x = "free", > ? ? ? ? ? ? ? ? ? ?y = list(relation = "same", log = 2)), > ? ? ? ? ? ? ? ? ? ?between = list(x = 0.5), > ? ? ? ? ? ? ? ? ? ?panel = function(x, y, ...) { > ? ? ? ? ? ? ? ? ? ? ? ?panel.grid(h = -1, v = -1, lwd = 1) > ? ? ? ? ? ? ? ? ? ? ? ?panel.superpose(x, y, ...) > ? ? ? ? ? ? ? ? ? ?}, > ? ? ? ? ? ? ? ? ? ?type = c('b') > ? ? ? ? ? ? ? ? ? ?) > plot(test.plot) > > (this plot doesn't look good, I know, it's just and example) > Thank you > -- > Armin Goralczyk > -- > http://www.gwdg.de/~agoralc > > ______________________________________________ > 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. >-- _____________________________ Baptiste Augui? School of Physics University of Exeter Stocker Road, Exeter, Devon, EX4 4QL, UK http://newton.ex.ac.uk/research/emag
On Thu, Jul 30, 2009 at 12:43 AM, Armin Goralczyk<agoralczyk at gmail.com> wrote:> Hello (R-)Experts > > I hope someone can help with this problem concerning axis annotation > of a lattice shingle plot. I want a plot with three shingles to > display some laboratory value over time. In the first panel over the > first few days, then in the next panel some months, and in the last > panel some years. In the following minimal example the axis annotation > will be in days, but I'd like to have days in the fisrt panel, months > in the second panel and years in the third panel. Is it possible? > > pod <- seq(1, 5000, 5) > test <- data.frame(pod=pod, > ? ? ? ? ? ? ? ? ? val=rep(c(1,2,4,8), length=length(pod)), > ? ? ? ? ? ? ? ? ? g=rep(c('A', 'B'), length=length(pod))) > shingle.pod <- shingle(test$pod, intervals = rbind(c(0, 20), c(20, 180), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c(220, 6000))) > test.plot <- xyplot(val ~ pod | shingle.pod, > ? ? ? ? ? ? ? ? ? ?data = test, > ? ? ? ? ? ? ? ? ? ?groups = test$g, > ? ? ? ? ? ? ? ? ? ?scales = list(x = "free", > ? ? ? ? ? ? ? ? ? ?y = list(relation = "same", log = 2)), > ? ? ? ? ? ? ? ? ? ?between = list(x = 0.5), > ? ? ? ? ? ? ? ? ? ?panel = function(x, y, ...) { > ? ? ? ? ? ? ? ? ? ? ? ?panel.grid(h = -1, v = -1, lwd = 1) > ? ? ? ? ? ? ? ? ? ? ? ?panel.superpose(x, y, ...) > ? ? ? ? ? ? ? ? ? ?}, > ? ? ? ? ? ? ? ? ? ?type = c('b') > ? ? ? ? ? ? ? ? ? ?) > plot(test.plot) > > (this plot doesn't look good, I know, it's just and example)If your panels do not overlap, it may be simplest to rescale your data beforehand: rescale <- function (x) { ans <- x mid <- x > 20 & x < 180 ans[mid] <- ans[mid]/30 hi <- x >= 180 ans[hi] <- ans[hi]/365 ans } test.plot <- xyplot(val ~ rescale(pod) | shingle.pod, data = test, groups = test$g, scales = list(x = "free", etc. -Deepayan