Skip to content
Prev 167591 / 398502 Next

Stacked barplot with two stacked bars besides each other

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