user441706
user441706

Reputation: 1370

can one offset jitter points in ggplot boxplot

In a ggplot boxplot, it is easy to use jitter to add the raw data points with varying degrees of jitter. With zero jitter the following code

dat <- data.frame(group=c('a', 'b', 'c'), values = runif(90))

ggplot(dat, aes(group, values)) + 
geom_boxplot(outlier.size = 0) + 
geom_jitter(position=position_jitter(width=0), aes(colour=group), alpha=0.7) + 
ylim(0, 1) + stat_summary(fun.y=mean, shape=3, col='red', geom='point') +
opts(legend.position = "right") + ylab("values") + xlab("group")

produces the plot below.

Is it possible to use zero jitter but add an offset such that the points are in a line but shifted left by 25% of the box width? I tried geom_point with dodge but this generated a jitter.enter image description here

Upvotes: 6

Views: 6476

Answers (1)

Chase
Chase

Reputation: 69151

If we convert group to numeric and then add an offset, you seem to get your desired output. There is probably a more effective / efficient way, but give this a whirl:

ggplot(dat, aes(group, values)) + 
  geom_boxplot(outlier.size = 0) + 
  geom_point(aes(x = as.numeric(group) + .25, colour=group), alpha=0.7) + 
  ylim(0, 1) + stat_summary(fun.y=mean, shape=3, col='red', geom='point') +
  opts(legend.position = "right") + ylab("values") + xlab("group")

enter image description here

Upvotes: 8

Related Questions