nrcombs
nrcombs

Reputation: 533

Equal bar width across facet_wrap barplots

I have a data frame that looks like this:

category = c(rep("house", 2), rep("apartment", 4), rep("condo", 3))
sample = paste("ID", seq(1:9), sep='')
group = c(rep(1,9), rep(2,9))
value = c(0.990000, 0.608143, 0.451284, 0.500343, 0.482670, 0.358965, 0.393272, 0.300472, 0.334363, 0.001000, 0.391857, 0.548716, 0.499657, 0.517330, 0.641035, 0.606728, 0.699528, 0.665637)
data = as.data.frame(cbind(category, sample, group, value))

I want to use the variable 'category' to facet_wrap a stacked barplot, like this:

ggplot(data, aes(x=sample, y=value, fill=group)) + 
  geom_bar(stat="identity", width=1) +
  facet_wrap(facet ~ ., scales="free_x")

The number of samples in each category is uneven but ggplot automatically makes each barplot the same width, meaning that the bars across plots are not the same width, like this:

enter image description here

Is there a way to force ggplot to keep the bars all the same width, such that the overall width of each barplot is different across plots?

Thanks for any tips!

Upvotes: 3

Views: 4519

Answers (1)

d.b
d.b

Reputation: 32548

Try facet_grid

ggplot(data, aes(x = sample, y = value, fill = group)) + 
    geom_bar(stat = "identity", width = 1, col = "black") +
    facet_grid(. ~ category, scales = "free", space = "free")

Upvotes: 8

Related Questions