[R] lattice dotplot reorder contiguous levels
Massimo Bressan
mbressan at arpa.veneto.it
Fri Sep 21 11:08:28 CEST 2012
deepayan, is that what you mean?
but still the problem persists: nor correct neither contiguous labelling!
I must probably reconsider everything from scratch: I'm bit confused now...
test$samp.time.new <- with(test, reorder(samp.time:site, as.numeric(site)))
s<-strsplit(levels(test$samp.time.new), ":")
s1<- sapply(s, '[', 1)
dotplot(samp.time~conc|site, data=test,
ylim=s1,
scales=list(x=list(log=10), y = list(relation = "free")),
layout=c(1,5), strip=FALSE, strip.left=TRUE
)
Il 21/09/2012 08:55, Deepayan Sarkar ha scritto:
> On Thu, Sep 20, 2012 at 7:48 PM, maxbre <mbressan at arpa.veneto.it> wrote:
>> my reproducible example
>>
>> 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")
>>
>>
>>
>> dotplot(samp.time~conc|site, data=test,
>> scales=list(x=list(log=10), y = list(relation = "free")),
>> layout=c(1,5), strip=FALSE, strip.left=TRUE
>> )
>>
>>
>> my objective is to use “site” as conditioning variable but with “samp.time”
>> correctly grouped by “site”; the problem here is to ensure that levels of
>> “samp.time” within each “site” are contiguous as otherwise they would be not
>> contiguous in the dot plot itself (i.e, avoid that sort of holes in between
>> y axis categories -see dotplot -)
>>
>>
>> I’ve been trying with this but without much success
>>
>> test$samp.time.new<-
>> with(test,reorder(samp.time,as.numeric(site)))
>>
>>
>> dotplot(samp.time.new~conc|site, data=test,
>> scales=list(x=list(log=10), y = list(relation = "free")),
>> layout=c(1,5), strip=FALSE, strip.left=TRUE
>> )
>>
>> I think (I hope) a possible different solution is to create for "ylim" a
>> proper character vector of different length to pass to each panel of the
>> dotplot (I’m not posting this attempt because too much confused up to now)
>>
>> can anyone point me in the right direction?
> The problem here is that there is crossing between sites and
> samp.time. You can try some imaginative permutations of site, such as
>
> test$samp.time.new <- with(test, reorder(samp.time,
> as.numeric(factor(site, levels = c("A", "C", "D", "B", "E")))))
>
> which gets all but site B right. There may be another permutation that
> works for everything, but it would be much easier to make a nested
> factor, i.e.,
>
> test$samp.time.new <- with(test, reorder(samp.time:site, as.numeric(site)))
>
> That just leaves getting the y-labels right, which I will leave for
> you to figure out.
>
> (Hint: ylim = some_function_of(levels(test$samp.time.new)))
>
> -Deepayan
>
More information about the R-help
mailing list