I want to plot something like this in R.
I found some similar solution here so I tried something similar:
test <- data.frame(person=c("group 1", "group 2", "group 3"),
value1=c(100,150,120), # male
value2=c(25,30,45) , # female
value3=c(25,30,45), # male
value4=c(100,120,150), # female
value5=c(10,12,15), # male
value6=c(50,40,70)) # female
library(reshape2) # for melt
melted <- melt(test, "person")
melted$cat <- ''
melted[melted$variable == 'value1' | melted$variable == 'value2',]$cat <- "sub group 1"
melted[melted$variable == 'value3' | melted$variable == 'value4',]$cat <- "sub group 2"
melted[melted$variable == 'value5' | melted$variable == 'value6',]$cat <- "sub graoup 3"
p = ggplot(melted, aes(x = cat, y = value, fill = variable))
+ geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person)
What I ended with is:
The problem is now I have 6 different values with 6 different colors. What I really want is 2 different values, let's call theme male
and female
represented by 2 different colors.
How can I do it in R? The data can be constructed in any different way (doesn't have to use data.frame as above). I don't need to use ggplot
. In fact, I prefer the white clean background in example image than the grey background I got using ggplot.