On Thu, Aug 11, 2022 at 9:03 PM Naresh Gurbuxani <
naresh_gurbuxani at 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.4567 at
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_gurbuxani at 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.4567
at 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_gurbuxani at 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.sarkar at gmail.com> wrote:
> >>>>>
> >>>>> ?On Wed, Aug 10, 2022 at 4:53 PM Naresh Gurbuxani
> >>>>> <naresh_gurbuxani at 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 at 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 at 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.
>
[[alternative HTML version deleted]]