48

I'd like to add spaces between bars in ggplot2. This page offers one solution: How to increase the space between the bars in a bar plot in ggplot2?. Instead of using factor levels for the x-axis groupings, however, this solution creates a numeric sequence, x.seq, to manually place the bars and then scales them using the width() argument. width() doesn't work, however, when I use factor level groupings for the x-axis as in the example, below.

library(ggplot2)

Treatment <- rep(c('T','C'),each=2)
Gender <- rep(c('M','F'),2)
Response <- sample(1:100,4)
df <- data.frame(Treatment, Gender, Response)

hist <- ggplot(df, aes(x=Gender, y=Response, fill=Treatment, stat="identity"))
hist + geom_bar(position = "dodge") + scale_y_continuous(limits = c(0, 
    100), name = "") 

Does anyone know how to get the same effect as in the linked example, but while using factor level groupings?

1
  • 1
    Also of note is the usefulness of facetting + facet_grid(~Treatment) Commented May 22, 2011 at 4:57

1 Answer 1

97

Is this what you want?

hist + geom_bar(width=0.4, position = position_dodge(width=0.5))
  • width in geom_bar determines the width of the bar.
  • width in position_dodge determines the position of each bar.

Probably you can easily understand their behavior after you play with them for a while.

enter image description here

Sign up to request clarification or add additional context in comments.

4 Comments

width in geom_histogram() is deprecated in modern ggplot2 (>= 2.1.0).
what if I want to keep the bars per-group together (e.g. the 'C' and 'T' bars here) but want to change the spacing between groups ('M' and 'F' here)?
Regarding the question by user5359531, see here: stackoverflow.com/questions/51892875/…
As kohske didn't describe how they work: width in geom_bar is the width of x-axis bar groups. width in position_dodge is the width of bars within each x-axis group. A width of "1" means that bars/groups touch each other. Widths < 1 adds space between bars or between groups.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.