6

I have a (dense) dataset that consist of 5 groups, so my data.frame looks something like x,y,group. I can plot this data and colour the points based on their group using:

p= ggplot(dataset, aes(x,y))
p = p + geom_point(aes(colour = group))

My problem is now only that I want to control which group is on top. At the moment it looks like this is randomly decided for (at least I don't seem to be able to figure out what makes something be the "top" dot). Is there any way in ggplot2 to tell geom_point what the order of dots should be?

Roman Luštrik
  • 69,533
  • 24
  • 154
  • 197
Sander
  • 801
  • 2
  • 7
  • 13
  • On ggplot2 mailing list, Hadley mentions order aesthetic. I haven't got an example to demonstrate, though. http://groups.google.com/group/ggplot2/browse_thread/thread/3658af3b3c71c213/6120eb17eedb8481?lnk=gst&q=order+within+geom#6120eb17eedb8481 – Roman Luštrik Mar 27 '12 at 10:29
  • See related post: [controlling order of points in ggplot2?](http://stackoverflow.com/questions/15706281/controlling-order-of-points-in-ggplot2-in-r/29325361) – Sam Firke Jul 21 '15 at 20:37

2 Answers2

10

The order aesthetic is probably what you want.

library(ggplot2)
d <- ggplot(diamonds, aes(carat, price, colour = cut))
d + geom_point()
dev.new()
d + geom_point(aes(order = sample(seq_along(carat))))

The documentation is at ?aes_group_order

jonchang
  • 1,434
  • 9
  • 13
8

When you create the factor variable, you can influence the ordering using the levels parameter

f = factor(c('one', 'two'), levels = c('one', 'two'))
dataset = data.frame(x=1:2, y=1:2, group=f)
p = ggplot(dataset, aes(x,y))
p = p + geom_point(aes(colour = group))

Now, ggplot uses this order for the legend.

smu
  • 8,757
  • 2
  • 19
  • 14