I hit the wrong button, unfortunately, so others beside Naresh and Deepayan can safely ignore my "coda".
On Fri, Aug 12, 2022 at 2:29 PM Bert Gunter <bgunter.4...@gmail.com> wrote: > > As a private coda -- as it is unlikely to be of general interest -- > note that it is easy to do this without resorting to the layering > paradigm through the use of the appropriate panel function and > lattice's argument passing protocol (although I stand in awe of Felix > Andrews's clever code!). Here's a version that uses R's underlying > with() function to control the nonstandard evaluation. I've added a > key and y axis label just to be cute: > > with(mydf,xyplot(short ~ date, group = name, > type = c("l","g"), > y2 =long, > ylim = extendrange(c(short,long)), > auto.key = list(lines=TRUE, points = FALSE, space = "right"), > ylab = "Name", > panel= function(x,y, y2,...){ > panel.superpose(x,y,...) > panel.superpose(x,y2,...) > })) > > On Fri, Aug 12, 2022 at 12:35 PM Naresh Gurbuxani > <naresh_gurbux...@hotmail.com> wrote: > > > > This is the solution I was looking for. Thanks to Deepayan and Bert for > > sticking with me. > > > > Naresh > > > > Sent from my iPhone > > > > On Aug 12, 2022, at 8:02 AM, Deepayan Sarkar <deepayan.sar...@gmail.com> > > wrote: > > > > > > > > > > On Thu, Aug 11, 2022 at 9:03 PM Naresh Gurbuxani > > <naresh_gurbux...@hotmail.com> wrote: > >> > >> Bert, > >> > >> Thanks for providing this solution. It produces the desired graph. > >> > >> To see how I want to distinguish groups, you should look at original data > >> (mydf). There are two groups (Aa and Bb), each with two time series (long > >> and short). Long is always positive. Short is always negative. > >> Therefore, there is no need to distinguish between long and short. I only > >> need to distinguish between Aa and Bb. > >> > >> I agree that more than six lines in the graph will make it cluttered. In > >> fact the above exercise is to avoid clutter in the key. No need to show > >> Aa.long and Aa.short, because long and short are obvious. > > > > > > In that case, this alternative approach may be conceptually simpler: > > > > library(latticeExtra) > > > > r <- with(mydf, extendrange(range(long, short))) > > > > plong <- xyplot(long ~ date, groups = name, data = mydf, > > type = "l", grid = TRUE, > > ylim = r) > > > > pshort <- xyplot(short ~ date, groups = name, data = mydf, type = "l") > > > > plong + pshort > > > > The first plot here is the "main" one, so you need to make sure that its > > 'ylim' is big enough for all the data. > > > > -Deepayan > > > > > >> > >> > >> Thanks, > >> Naresh > >> > >> Sent from my iPhone > >> > >> > On Aug 10, 2022, at 10:02 PM, Bert Gunter <bgunter.4...@gmail.com> wrote: > >> > > >> > It is unclear to me how you wish to define and distinguish groups. > >> > Assuming you wish to have separate lines for the interaction as > >> > Deepayan showed, but want the colors (or line types or both) to differ > >> > only by by the "name" factor, then is this what you want? > >> > > >> > trellis.par.set(superpose.line = list(lty = 1:6)) ## or other line > >> > types you create > >> > u.names <- unique(mydf.long$name) > >> > xyplot(X ~ date, groups = interaction(name,G), data = mydf.long, > >> > type = c("l","g"), > >> > col.line = trellis.par.get("superpose.line")$col[ > >> > seq_along(u.names)], > >> > lty = trellis.par.get("superpose.line")$lty[ > >> > seq_along(u.names)] > >> > ) > >> > > >> > Notes: > >> > 1. If this is not what you want, I give up. Others may have better > >> > insight. > >> > 2. If this is what you want, Deepayan may be able to provide you a > >> > nicer way to do it. > >> > 3. If you have more different names than 6 or 7, then you may have to > >> > add more line types or colors to the superpose.line settings. Though I > >> > would think the plot would be pretty much a mess, if so. > >> > > >> > Bert > >> > > >> > > >> >> On Wed, Aug 10, 2022 at 4:57 PM Naresh Gurbuxani > >> >> <naresh_gurbux...@hotmail.com> wrote: > >> >> > >> >> Actually I meant types (e.g., lty = 1:2). But colors would also work. > >> >> But I do not want to specify these in call to xyplot(). > >> >> > >> >> In my actual problem, there are more than two groups. Moreover, the > >> >> number of groups changes from case to case. In my set up, I use > >> >> trellis.par.set() to set line styles, colors, pch, etc. > >> >> > >> >> I would the call to xyplot() to automatically use the set options. > >> >> > >> >> Thanks, > >> >> Naresh > >> >> > >> >> Sent from my iPhone > >> >> > >> >>>> On Aug 10, 2022, at 5:40 PM, Bert Gunter <bgunter.4...@gmail.com> > >> >>>> wrote: > >> >>> > >> >>> I assume you mean two line colors, not types. > >> >>> Like this? > >> >>> > >> >>> xyplot(X ~ date, groups = interaction(name,G), data = mydf.long, > >> >>> type = c("l", "g"), col.line = c("blue","red")) > >> >>> > >> >>> > >> >>> Cheers, > >> >>> Bert > >> >>> > >> >>>> On Wed, Aug 10, 2022 at 2:12 PM Naresh Gurbuxani > >> >>>> <naresh_gurbux...@hotmail.com> wrote: > >> >>>> > >> >>>> Deepayan, > >> >>>> > >> >>>> Thanks for providing a solution. While this is close to my goal, I > >> >>>> want one more change. The line type (lty) should be the same for > >> >>>> long and short. The line type should only change according to “name” > >> >>>> group. So the the graph will have two line types (not four as in > >> >>>> your solution). > >> >>>> > >> >>>> Is it possible? > >> >>>> > >> >>>> Thanks, > >> >>>> Narrsh > >> >>>> > >> >>>> Sent from my iPhone > >> >>>> > >> >>>>>> On Aug 10, 2022, at 9:37 AM, Deepayan Sarkar > >> >>>>>> <deepayan.sar...@gmail.com> wrote: > >> >>>>> > >> >>>>> On Wed, Aug 10, 2022 at 4:53 PM Naresh Gurbuxani > >> >>>>> <naresh_gurbux...@hotmail.com> wrote: > >> >>>>>> > >> >>>>>> > >> >>>>>> I want to merge two panels into one. Is it possible to do this? > >> >>>>>> > >> >>>>>> Thanks, > >> >>>>>> Naresh > >> >>>>>> > >> >>>>>> library(lattice) > >> >>>>>> mydf <- data.frame(date = rep(seq.Date(as.Date("2022-08-01"), by = > >> >>>>>> 1, > >> >>>>>> length.out = 10), 2), name = c(rep("Aa", 10), rep("Bb", 10)), > >> >>>>>> long = runif(20, 2, 10), short = runif(20, -10, 0)) > >> >>>>>> > >> >>>>>> # This plots data in two panels. I want all four lines in one > >> >>>>>> panel. > >> >>>>>> xyplot(long + short ~ date, groups = name, data = mydf, type = > >> >>>>>> c("l", > >> >>>>>> "g")) > >> >>>>> > >> >>>>> The "extended" formula API (with +) is really only meant as an > >> >>>>> alternative to reshape() for simple cases. In your case, you probably > >> >>>>> want something like > >> >>>>> > >> >>>>> mydf.long = reshape(mydf, direction = "long", varying = > >> >>>>> list(c("long", > >> >>>>> "short")), v.names = "X", timevar = "G", times = c("long", "short")) > >> >>>>> > >> >>>>> xyplot(X ~ date, groups = interaction(name, G), data = mydf.long, > >> >>>>> type > >> >>>>> = c("l", "g")) > >> >>>>> > >> >>>>> -Deepayan > >> >>>>> > >> >>>>>> # This does not work > >> >>>>>> # No error in R session > >> >>>>>> # Graph window says: "Error using packet 1 > >> >>>>>> # argument 'subscripts' is missing, with no default" > >> >>>>>> xyplot(long ~ date, data = mydf, groups = name, type = c("l", "g"), > >> >>>>>> panel = function(x, y, ..., subscripts) { > >> >>>>>> panel.xyplot(x, y, ...) > >> >>>>>> panel.xyplot(mydf$date[subscripts], mydf$short[subscripts], ...)}) > >> >>>>>> > >> >>>>>> ______________________________________________ > >> >>>>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> >>>>>> 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. > >> >>>> ______________________________________________ > >> >>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> >>>> 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.