Skip to content
Back to formatted view

Raw Message

Message-ID: <CADfFDC7KXPrB4GtTQVRFpT6Dia2H7z-EY8_KRa6-JE0wRMjgOA@mail.gmail.com>
Date: 2012-09-26T11:26:18Z
From: Deepayan Sarkar
Subject: lattice dotplot reorder contiguous levels
In-Reply-To: <1348653990686-4644215.post@n4.nabble.com>

On Wed, Sep 26, 2012 at 3:36 PM, maxbre <mbressan at arpa.veneto.it> wrote:
> sorry for my slow reply, this is what I worked out so far?
>
> my reproducible example and the code
>
> test<-structure(list(site = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
> 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
> 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
> 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L), .Label = c("A",
> "B", "C", "D", "E"), class = "factor"), conc = c(2.32, 0.902,
> 0.468, 5.51, 1.49, 0.532, 0.72, 0.956, 0.887, 20, 30, 2.12, 0.442,
> 10, 50, 110, 3.36, 2.41, 20, 70, 3610, 100, 4.79, 20, 0.0315,
> 30, 60, 1, 3.37, 80, 1.21, 0.302, 0.728, 1.29, 30, 40, 90, 30,
> 0.697, 6.25, 0.576, 0.335, 20, 10, 620, 40, 9.98, 4.76, 2.61,
> 3.39, 20, 4.59), samp.time = structure(c(2L, 4L, 4L, 4L, 4L,
> 4L, 5L, 4L, 8L, 8L, 8L, 8L, 8L, 9L, 8L, 7L, 8L, 8L, 8L, 8L, 3L,
> 3L, 2L, 4L, 4L, 4L, 4L, 4L, 1L, 4L, 6L, 4L, 8L, 4L, 8L, 4L, 3L,
> 8L, 4L, 8L, 4L, 8L, 4L, 9L, 3L, 8L, 8L, 8L, 8L, 8L, 8L, 1L), .Label = c("2",
> "4", "12", "24", "96", "135", "167", "168", "169"), class = "factor")),
> .Names = c("site",
> "conc", "samp.time"), row.names = c(NA, 52L), class = "data.frame")
>
> test$samp.time.new <- with(test, reorder(samp.time:site, as.numeric(site)))
>
> m<-match(unique(droplevels(test$samp.time.new)),test$samp.time.new)
> lab<-as.character(test$samp.time[m])
>
> dotplot(samp.time.new~conc|site, data=test,
>         ylim=lab,
>         scales=list(x=list(log=10), y = list(relation = "free")),
>         layout=c(1,5), strip=FALSE, strip.left=TRUE
>         )
>
> Now labels are correctly spaced and sorted out but still a ?slight? problem
> persist: i.e. the reordering of samp.time.new within each site; in fact, I
> would like to have an ascending order of sampling time but for some reason
> I?m not able to work it out properly?

For that, it should be enough to just reorder again by samp.time. Your
label code doesn't work then (I haven't tried to figure out why), but
your earlier idea using strsplit() does:


test$samp.time.new <-
    with(test, reorder(reorder(samp.time:site, as.numeric(site)),
                as.numeric(samp.time)))

lab <- sapply(strsplit(levels(test$samp.time.new), ":", fixed=TRUE), "[", 1)

dotplot(samp.time.new~conc|site, data=test,
        ylim=lab,
        scales=list(x=list(log=10), y = list(relation = "free")),
        layout=c(1,5), strip=FALSE, strip.left=TRUE
        )

-Deepayan