[R] Adding values to top of bars in barchart

Deepayan Sarkar deepayan.sarkar at gmail.com
Fri Apr 14 21:13:30 CEST 2006


On 4/14/06, Eric Archer <Eric.Archer at noaa.gov> wrote:
> Given the following data frame ("freq.sp"),
>
>  > str(freq.sp)
> `data.frame':   42 obs. of  4 variables:
>  $ behav  : Factor w/ 6 levels "approach","bowride",..: 1 1 1 1 1 1 1 2
> 2 2 ...
>  $ species: Factor w/ 7 levels "COAST_SPOT","EAST_SPINR",..: 1 2 3 4 5 6
> 7 1 2 3 ...
>  $ n      : int  193 194 563 357 570 369 74 194 208 633 ...
>  $ pct    : num  0.725 0.340 0.252 0.381 0.072 ...
>
> I create a trellis barchart with the following command,
>
> barchart(pct ~ behav | species, data=freq.sp, as.table=TRUE,
> xlab="Behavior",
>     ylab="Frequency", ylim=c(0,1), main="Frequencies of Behaviors",
>     scales=list(x=list(rot=45)))
>
> In this graph, I would like to include the sample sizes (the value of
> freq.sp$n corresponding to each freq.sp$pct) at the top of each bar.  I
> don't see a specific command in barchart that will allow me to do this
> and am fairly new to lattice graphics.  I've done RSiteSearches on
> keywords that I could think of, but didn't run across anything I
> recognized as useful. Any pointers on how to accomplish this would be
> greatly appreciated.  Thanks in advance.

Here's an example using the barley data. For more flexible placement
of the text, use grid.text from the grid package directly (instead of
panel.text):


library(lattice)

barchart(I(yield / sum(yield)) ~ variety | site, barley,
         subset = (year == "1931"),
         scales = list(x = list(rot = 45)),
         label = round(barley$yield),
         panel = function(x, y, label, subscripts, ...) {
             lab <- label[subscripts]
             panel.barchart(x, y, ..., subscripts = subscripts)
             panel.text(x = x, y = y + 0.001, lab = lab,
                        cex = 0.5)
         })

Deepayan
--
http://www.stat.wisc.edu/~deepayan/




More information about the R-help mailing list