Rcoster
Rcoster

Reputation: 3210

Barplot with 3 categorical variable

I have a data like this:

data <- data.frame(Comp = factor(rep(2003:2004, each = 8)), 
                   Cat = rep(letters[1:4], 4), 
                   Type = rep(c('Free','Used'), each = 4), 
                   Count = trunc(rnorm(16,30,2)))

And I need something like a barplot with beside = TRUE and beside = FALSE (TRUE for Cat and Comp, and FALSE = Type).

With this data, it will result a plot with 8 columns (Interaction of Comp with Cat (Comp = 2003 + Cat = A ; Comp = 2003 + Cat = B ; ... ; Comp = 2004 + Cat = D)), each one with 2 stacked columns (the levels of Type (Free and Used)) for Count variable.

Any tip how can I do this kind of plot? I tried to do an example in EXCEL, but I failed on it too.

Upvotes: 3

Views: 9959

Answers (2)

Justin
Justin

Reputation: 43245

Similarly in ggplot2:

ggplot(data, aes(x=interaction(Cat, Comp), y=Count, fill=Type)) +   
  geom_bar(position='stack', stat='identity')

To group on an additional variable (or two) you can use facet_wrap or facet_grid.

ggplot(data, aes(x=Cat, y=Count, fill=Type)) +   
  geom_bar(position='stack', stat='identity') +
  facet_wrap( ~ Comp)

Upvotes: 4

Matthew Lundberg
Matthew Lundberg

Reputation: 42629

In lattice:

 barchart(Count~interaction(Cat,Comp),groups=Type,data=data,auto.key=T,stack=T)

enter image description here

Another way to group, from the comment:

barchart(Count~Cat|factor(Comp),groups=Type,data=data,auto.key=T,stack=T)

enter image description here

Upvotes: 4

Related Questions