Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ggplot2: plotting order of factors within a geom

Tags:

r

ggplot2

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?

like image 641
Sander Avatar asked Mar 27 '12 10:03

Sander


People also ask

How do I change the order of data in ggplot2?

To reorder the boxplot we will use reorder() function of ggplot2. By default, ggplot2 orders the groups in alphabetical order.

How do you reorder a factor in R?

Using factor() function to reorder factor levels is the simplest way to reorder the levels of the factors, as here the user needs to call the factor function with the factor level stored and the sequence of the new levels which is needed to replace from the previous factor levels as the functions parameters and this ...

What is AES () in ggplot?

aes() is a quoting function. This means that its inputs are quoted to be evaluated in the context of the data. This makes it easy to work with variables from the data frame because you can name those directly. The flip side is that you have to use quasiquotation to program with aes() .

What does geom_point () do in R?

The function geom_point() adds a layer of points to your plot, which creates a scatterplot.


2 Answers

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

like image 79
jonchang Avatar answered Sep 20 '22 09:09

jonchang


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.

like image 38
smu Avatar answered Sep 19 '22 09:09

smu