Skip to content

Combined grouped and stacked bargraph

2 messages · Nicola Van Wilgen, Jim Lemon

#
On 05/02/2012 04:18 PM, Nicola Van Wilgen wrote:
Hi Nicola,
This is somewhat unusual. You can do a Q&D like this:

barstack<-function(x,y,heights,width,border=par("fg"),col=NA) {
  nrect<-length(heights)
  rect(rep(x-width/2,nrect),c(0,cumsum(heights[1:(nrect-1)])),
   rep(x+width/2,nrect),cumsum(heights),border=border,col=col)
}
cs.not.log.bp <- (structure(c(168, 69, 16, 69, 41, 6, 148,
  6, 5, 4, 7, 4, 4, 2, 7, 2, 4,
  2, 4, 2, 1, 0, 2, 0), .Dim = c(4L, 6L),
  .Dimnames = list(
  c("IUCN.Terrestrial", "IUCN.Marine", "National.CS.Terrestrial",
    "National.CS.Marine"), c("NE", "LC", "NT", "VU", "EN", "CR"))))

plot(0,xlim=c(0.5,6.5),ylim=c(0,240),type="n")
for(stack in 1:6) {
  barstack(stack-0.2,0,cs.not.log.bp[1:2,stack],0.4,
   col=c("lightblue","blue"))
  barstack(stack+0.2,0,cs.not.log.bp[3:4,stack],0.4,
   col=c("lightgreen","green"))
}
legend(4,200,c("IUCN Terrestrial","IUCN Marine",
  "National Terrestrial","National Marine"),
  fill=c("lightblue","blue","lightgreen","green"))

If you only need this one illustration, that is probably the easiest 
thing to do. You can add the appropriate title, axis labels and x-axis 
tick labels to finish it off. If you need to do a lot of this, it could 
be wrapped up in a little function that would incorporate or call the 
"barstack" function.

Jim