Skip to content

Stacked barplot with two stacked bars besides each other

6 messages · Henrique Dallazuanna, Daniel Brewer, Hadley Wickham

#
Hi,

I have a particular barplot I would like to generate, but I am having
trouble getting it to work.  What I would like is in effect two barplots
 with stacked bars merged into one.  For example,  I have two samples
(yoda1,yoda2) on which I measure whether two variables (var1,var2) are
present or absent for a number of measurements on that sample.
For each variable I can plot a barplot
I would like to join these together, so that for each sample there are
two stacked bars next to each other, one for var1 and the other for
var2.  I was thinking something like:
would work, but it didn't.

Any suggestions you could make would be great.

Dan
#
Thanks.
That is definitely in the right direction, but firstly I would like
yoda1:var1 next to yoda1:var2, not as currently yoda1:var1, yoda2:var1,
yoda1:var2, yoda2:var2.  Additionally, I would like the gap between
samples to be greater than the gap between variables.

Many thanks

Dan
Henrique Dallazuanna wrote:

  
    
#
Thanks Henrique.  Unfortunately, that gets us a step closer but it fails
to stack the individual bars, so instead of having a total of 10 for
each bar you get 7, 8, 9 & 5 (i.e. the largest for each var sample
pair).  I tried adding the stack=T option, but that stacks all of each
sample and you are left with two bars.  Any more ideas?

Appreciate your help

Dan
Henrique Dallazuanna wrote:

  
    
#
On Tue, Jan 20, 2009 at 4:28 AM, Daniel Brewer <daniel.brewer at icr.ac.uk> wrote:
I'd start by storing your data in a single data frame, with all
information explicit:

var1$row <- 1:2
var1$var <- "one"
var2$row <- 1:2
var2$var <- "two"

vars <- rbind(var1, var2)

library(reshape)
df <- melt(vars, id = c("var", "row"))
names(df)[3] <- "yoda"
df

(In reality you'd give the variables informative names based on your
study design)

Then you're in a position to better describe and control what you
want.  With the data in this form, you could then use the ggplot2
package to display it:

library(ggplot2)
qplot(yoda, value, data = df, fill = factor(row), geom="bar", stat =
"identity", facets = ~ var)

This puts yoda on the x axis, colours the bars by the row and
separates the plot into two panels based on var.  It's trivial to
produce any other arrangement of the three variables.

qplot(var, value, data = df, fill = factor(row), geom="bar", stat =
"identity", facets = ~ yoda)
qplot(row, value, data = df, fill = yoda, geom="bar", stat =
"identity", facets = ~ var)
etc

Hadley