Let say I have below multiple bar chart with ggplot
raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",")
raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE)
raw=raw[,c(2,3,4)]
freq=table(col(raw), as.matrix(raw)) # get the counts of each factor level
Names=c("Food","Music","People")
data=data.frame(cbind(freq),Names)
data=data[,c(5,3,1,2,4)]
data.m <- melt(data, id.vars='Names')
ggplot(data.m, aes(Names, value)) +
geom_bar(aes(fill = variable), position = "dodge", stat="identity")
This is fine. However I want to add some group information along the x-axis. Let say 2 groups are defined as Group1 : Food and Music and Group2 : People. With this, I am trying build a ggplot like below

I also want to reduce the space between Food & Music and increase the space between Music & People - just to demonstrate Food & Music form 1 group and People another group.
Is there any way to achieve this using ggplot framework?
There are several options like adding the group information as annotations to your plot. But IMHO a good starting point and the simplest approach would be to use faceting:
Using some fake example data:
library(ggplot2)
variable <- c("Very Bad","Bad","Good","Very Good")
data.m <- data.frame(
Names = rep(c("Food","Music","People"), each = 4),
value = 1:12,
variable = factor(variable, levels = variable)
)
data.m$group <- ifelse(data.m$Names %in% c("Food", "Music"), "Group 1", "Group 2")
ggplot(data.m, aes(Names, value)) +
geom_bar(aes(fill = variable), position = "dodge", stat="identity") +
facet_grid(.~group, space = "free", scales = "free_x", switch = "x") +
theme(strip.placement = "outside",
strip.background.x = element_rect(fill = NA),
strip.text.x = element_text(color = "red"))

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With