Using geom_point with position_jitterdodge only works when adjusting the fill sketch. I do not understand why this should be!
This team
library(ggplot2) ggplot(diamonds[ sample(nrow(diamonds), 1000), ], aes(x = cut, y = carat, color = clarity)) + geom_point(shape = 21, position = position_jitterdodge())
Gives an error message:
Error: position_jitterdodge requires the following missing aesthetics: fill
This works though:
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], aes(x = cut, y = carat, fill = clarity)) + geom_point(shape = 21, position = position_jitterdodge())

Simply filling in the NA value is not a viable solution:
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], aes(x = cut, y = carat, color = clarity, fill=NA)) + geom_point(shape = 21, position = position_jitterdodge()) > Error in seq.default(h[1], h[2], length = n) : 'to' cannot be NA, NaN or infinite
Although it works if you specify an arbitrary constant (goodbye to disgusting results):
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], aes(x = cut, y = carat, color = clarity, fill='constant')) + geom_point(shape = 21, position = position_jitterdodge())

Any ideas on how to use jitter / dodge without specifying padding? (i.e. only colored dots)
Edit: next to the @joran comment, I would like to put points on the boxes. Since it is not necessary to use fill to differentiate the boxes, it would be great if geom_point(position=position_jitterdodge()) placed graphs without fill . Perhaps currently impossible, though ...