[R] Adding labels into lattice's barchart
Luca Meyer
lucam1968 at gmail.com
Mon Feb 14 12:46:18 CET 2011
Thanks Deepayan,
What you suggest is quite fine, but provides the overall number of cases for the entire dataset splitted into V2 levels.
What about if I need to show panel specific's values? For instance I want to show not the total number of Female but the total number of Female in 1st Class.
In other worlds, take your example and suppose I have:
barchart(V2 ~ Freq | V1, data = tdf, groups = V3, layout=c(1,4), stack=TRUE,
ylim = sprintf("%s (n=%g)", names(numByV2), numByV2))
and now what I would like to show is the result of
with(tdf, tapply(Freq, list(V2,V1), sum))
next to each stacked bar.
In the previous example, I would need show in the Crew panel Female (n=23), in the 3rd Class panel Female (n=196), etc...
Can I do that?
Thanks,
Luca
Il giorno 14/feb/2011, alle ore 11.43, Deepayan Sarkar ha scritto:
> On Wed, Feb 9, 2011 at 11:04 PM, Luca Meyer <lucam1968 a gmail.com> wrote:
>> *** APOLOGIZES FOR THOSE READING THE LIST THROUGH NABBLE THIS WAS ALREADY POSTED THERE BUT NOT FORWARDED TO THE LIST FOR SOME UNKNOWN REASON ***
>>
>> I have a dataset that looks like:
>>
>> $ V1: factor with 4 levels
>> $ V2: factor with 4 levels
>> $ V3: factor with 2 levels
>> $ V4: num (summing up to 100 within V3 levels)
>> $ V5: num (nr of cases for each unique combination of V1*V2*V3 levels)
>>
>> Quite new to lattice - I've started reading Deepayan's book a few days ago - I have written the following:
>>
>> barchart(V2 ~ V4 | V1,
>> data=d1,
>> groups=V3,
>> stack=TRUE,
>> auto.key= list(space="top"),
>> layout = c(1,4),
>> xlab=" "
>> )
>>
>> which works just fine as a stacked bar chart with bars adding up to 100%. Now what I would like to see is the number of cases showing next to the 4 x-axis's labels - i.e. V2_L1, ... V2_L4.
>>
>> In other words now I see something like:
>>
>> *** V1_L1 ***
>> V2_L4 AAAVVVVVVV
>> V2_L3 AAVVVVVVVV
>> V2_L2 AAAAAVVVVV
>> V2_L1 AAVVVVVVVV
>> *** V1_L2 ***
>> V2_L4 AAAAAAVVVV
>> V2_L3 AVVVVVVVVV
>> etc...
>>
>> But what I am looking for is something like:
>> *** V1_L1 ***
>> V2_L4 (n=60) AAAVVVVVVV
>> V2_L3 (n=10) AAVVVVVVVV
>> V2_L2 (n=52) AAAAAVVVVV
>> V2_L1 (n=15) AAVVVVVVVV
>> *** V1_L2 ***
>> V2_L4 (n=18) AAAAAAVVVV
>> V2_L3 (n=74) AVVVVVVVVV
>> etc...
>>
>> How can I do that? I have tried:
>>
>> V6 <- paste(V2," (n",V5,")")
>
> What you really want is to compute the total sum of V5 per level of V2
> (and add that to the labels of V2). There are many ways of doing so,
> one is tapply().
>
> In the absence of a reproducible example, here is an approximation:
>
> tdf <- as.data.frame.table(apply(Titanic, c(1, 2, 4), sum))
> names(tdf)[1:3] <- paste("V", 1:3, sep = "")
>
> str(tdf)
>
> barchart(V2 ~ Freq | V1, data=tdf, groups=V3, stack=TRUE)
>
> with(tdf, tapply(Freq, V2, sum))
>
> numByV2 <- with(tdf, tapply(Freq, V2, sum))
>
> barchart(V2 ~ Freq | V1, data = tdf, groups = V3, stack=TRUE,
> ylim = sprintf("%s (n=%g)", names(numByV2), numByV2))
>
> ## or
>
> levels(tdf$V2) <- sprintf("%s (n=%g)", levels(tdf$V2), numByV2)
> barchart(V2 ~ Freq | V1, data=tdf, groups=V3, stack=TRUE)
>
> -Deepayan
>
>>
>> but what i get when I run
>>
>> barchart(V6 ~ V4 | V1,
>> data=d1,
>> groups=V3,
>> stack=TRUE,
>> auto.key= list(space="top"),
>> layout = c(1,4),
>> xlab=" "
>> )
>>
>> is a bunch of empty bars due to the fact that the unique combinations have risen.
>>
>> Any help would be appreciated.
>>
>> Thanks,
>> Luca
>>
>> Mr. Luca Meyer
>> www.lucameyer.com
>> ______________________________________________
>> R-help a 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.
>>
More information about the R-help
mailing list