Reputation: 3210
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
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
Reputation: 42629
In lattice
:
barchart(Count~interaction(Cat,Comp),groups=Type,data=data,auto.key=T,stack=T)
Another way to group, from the comment:
barchart(Count~Cat|factor(Comp),groups=Type,data=data,auto.key=T,stack=T)
Upvotes: 4