A back-to-back barplot from scratch

This example is shown in Figure 3.30 in Paul Murrell's R Graphics book. Also, be aware of the Hmisc package's histbackback() function, which creates back-to-back histograms.

The example is built on the chickwts built-in data set, which can be accessed using the data() function.

   
library(Hmisc)
data(chickwts)
contents(chickwts)
describe(chickwts)

Our barplots will distinguish the number of chicks above the median weight, so we need to calculate this first. We can view the results using a simple table of frequencies.

   
chickwts <- upData(chickwts,
   median.weight = ifelse(weight > median(weight, na.rm = TRUE), 1, 0),
   levels = list(median.weight = c("Below", "Above")))

with(chickwts, table(feed, median.weight))

Now let's turn the table output into a back-to-back barplot. Let's first define the data we'll need to use (i.e., datta), and some parameters we'll need for the plot. Be aware, the final parameters were found through some trial and error.

   
# Define the data:
datta <- with(chickwts, table(feed, median.weight))
# Define some parameters:
xlimit <- 15 # dependent on max frequency given in table
ticks <- seq(-xlimit, xlimit, 5) # where to plac the tickmarks
nlines <- nlevels(chickwts$feed) # number of groups
yvals <- 1:nlines # y values for the groups
h <- 0.25 # height of bars

Now let's generate the plot.

   
par(mar=c(0.5, 5, 0.5, 1))
plot.new() # start a new plot frame
plot.window(xlim=c(-xlimit, xlimit), ylim=c(-2.0, nlines+0.5))
lines(rep(0, 2), c(-2.0, nlines+0.5), col="grey")
segments(-xlimit, yvals, xlimit, yvals, lty="dotted")
rect(-datta[, "Below"], yvals-h, 0, yvals+h, col="dark grey")
rect(0, yvals-h, datta[, "Above"], yvals+h, col="light grey")
mtext(levels(chickwts$feed), at=yvals, adj=1, side=2, las=2)
par(cex.axis=0.5, mex=0.5)
axis(1, at=ticks, labels=abs(ticks), pos = 0)
tw <- 1.5*strwidth("Below")
rect(-tw, -1-h, 0, -1+h, col="dark grey")
rect(0, -1-h, tw, -1+h, col="light grey")
text(0, -1, "Below", pos=2)
text(0, -1, "Above", pos=4)
text(0, -1.5, "Back-to-back Barplot of Chick Weights Below/Above Median Value", 
   adj = 0.5)
Topic revision: r2 - 14 Nov 2006, TheresaScott
 

This site is powered by FoswikiCopyright © 2013-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Vanderbilt Biostatistics Wiki? Send feedback