[R] confused about x-coordinates and bar charts

Marc Schwartz MSchwartz at medanalytics.com
Fri Jul 18 21:25:56 CEST 2003


On Fri, 2003-07-18 at 14:12, Marc Schwartz wrote:
> On Fri, 2003-07-18 at 13:41, Jay Pfaffman wrote:
> > Thanks for all the help on my previous histogram problem.  I intend to
> > summarize the solutions back to the list Real Soon Now, but first, I've
> > got another problem.
> > 
> > I've made a bar chart that reports means.  I'd like to put the number
> > of observations on top of each bar.  Here's what I've got:
> > 
> > barplot((subset$x),
> >         col=grey(.5),
> >         ylab="Mean Engagement Rating",
> >         xlab="Comment Category",
> >         main="All Engagement Ratings",
> >         ylim=c(0,7),
> >         cex.names=.75,
> >         names.arg=mynames
> >         )
> > 
> > 
> > for (i in 1:7){
> >   text(i,as.numeric(subset$x[i])+.5,counts$x[i])
> > }
> > 
> > 
> > This would seem to do the trick, but the numbers are not centered over
> > the bars.  They're a bit to the right on the bars on the left and
> > almost right on the bars on the right.  I don't understand why the
> > scale is not the same.  
> > 
> > Thanks again for your help.
> 
> 
> You need to get the bar midpoints (which are not integer values) and are
> returned by barplot() 'silently'. You must assign these to a separate
> variable to be used when calling barplot().  
> 
> Thus, change your code to:
> 
> mp <- barplot(subset$x,
>         col=grey(.5),
>         ylab="Mean Engagement Rating",
>         xlab="Comment Category",
>         main="All Engagement Ratings",
>         ylim=c(0,7),
>         cex.names=.75,
>         names.arg=mynames
>         )
> 
> Now to place the bar values above the bar tops use: 
> 
> text(mp, subset$x, labels = subset$x, pos = 3)
> 
> The 'pos = 3' argument, will place the text above the top of the bars. 
> 
> Also, note that you do not need a for loop here. Remember, R is vector
> based. A single call to text() will cycle through the values.
> 
> See ?barplot and ?text for more information.
> 
> HTH,
> 
> Marc Schwartz


Quick correction to my own reply, which is that the values to be printed
above the bars were not the means but the counts.  Hence use:

text(mp, subset$x, labels = counts$x, pos = 3)

Sorry for the oversight.

Marc




More information about the R-help mailing list