Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ggplot2: separate color scale per facet

Tags:

Intuitively I'm looking for something like: facet_(scales="free_color")

I do something like

p <- ggplot(mpg, aes(year, displ, color=model)) + facet_wrap(~manufacturer) p + geom_jitter() 

That is: plot 2d measurements from individuals(model) belonging to different species(manufacturer) faceted by a species, indicating the individual by color. The problem is that all individuals share the same color scale - so that the points in a facet have very similar colors.

Using the group aesthetic with geom_line would solve the problem, but lines tell different story than dots.

Another obvious solution would be to drop the faceting and draw a separate plot for each subset. (If this should be the only solution: are there any quick, smart or proven ways to do that?)

like image 854
ian Avatar asked Nov 19 '10 01:11

ian


2 Answers

I'm not sure that this is an available option when you're colouring by a factor. However, a quick way to produce the individual plots would be something like this:

d_ply(mpg, .(manufacturer), function(df) { jpeg(paste(df$manufacturer[[1]], ".jpeg", sep="")) plots <- ggplot(df, aes(year, displ, color=factor(model))) + geom_jitter() print(plots) dev.off() }) 

Related Answers: Different legends and fill colours for facetted ggplot?

like image 127
Brandon Bertelsen Avatar answered Sep 24 '22 12:09

Brandon Bertelsen


I think you simply want to color by class, where each manufacturer makes several models, each only one or two per class:

p <- ggplot(mpg, aes(year, displ, color=class)) + facet_wrap(~ manufacturer) p + geom_jitter() 

alt text

like image 20
Alex Brown Avatar answered Sep 22 '22 12:09

Alex Brown