[R] barplot() and highlighted values

Marc Schwartz marc_schwartz at me.com
Sat Apr 24 16:01:48 CEST 2010


On Apr 24, 2010, at 5:44 AM, Sebastian Bergmann wrote:

> Hello!
> 
> I started using R today to produce a bar chart that I can use in LaTeX.
> 
> Here is what I have got so far:
> 
>   pdf("bugfix_costs.pdf")
>   costs <- c(1, 5, 10, 20, 50, 150)
>   barplot(costs,
>           ylab="Relative cost of a bugfix",
>           names.arg=c("Requirements", "Design", "Code",
>           "Developer Tests", "Acceptance Tests", "Operations"),
>           cex.names=0.6
>          )
>   dev.off()
>   q()
> 
> What I am missing from the produced chart is "highlighted values" as in
> http://www.slideshare.net/spriebsch/die-5-goldenen-oopregeln-fr-php, for
> instance. Basically what I need is to put text above each of the bars.
> Is that possible?
> 
> Thanks!


You will find that most folks here will suggest that you not put the values on top of the bars, as they alter the visual perception of the graphic. A better approach is to put them below each bar on the x axis. Others will suggest that you use a ?dotchart instead of a barplot.

A key feature to note is that barplot() returns the x axis values of the bar midpoints, which enables the alignment of annotations:

costs <- c(1, 5, 10, 20, 50, 150)

mp <- barplot(costs, ylab = "Relative cost of a bugfix", 
              names.arg = c("Requirements", "Design", "Code", "Developer Tests", 
                            "Acceptance Tests", "Operations"),
                          cex.names = 0.6)

mtext(1, at = mp, text = costs, cex = 0.6, line = 2)


See ?mtext for more information


If you really want the values on top of the bars, use text() instead of mtext(). You will also need to increase the max value of the y axis to make room for the labels using the ylim argument in barplot():


costs <- c(1, 5, 10, 20, 50, 150)

mp <- barplot(costs, ylab = "Relative cost of a bugfix", 
              names.arg = c("Requirements", "Design", "Code", "Developer Tests", 
                            "Acceptance Tests", "Operations"),
                          cex.names=0.6, ylim = c(0, max(costs) * 1.2))

text(mp, costs, labels = costs, pos = 3)


See ?text for more information.

HTH,

Marc Schwartz



More information about the R-help mailing list