Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specifying same limits for colorbar (legend) in ggplot2

I want multiple plots to share the same color-scale. A given value in one plot should have the same color as in the second plot. How do I enforce this with ggplot2?

Here is an example of two plots that do not share color-scales, but should:

x <- matrix(1:16, 4)
y <- matrix(1:16-5, 4)
library(reshape)
ggplot(data = melt(x)) + geom_tile(aes(x=X1,y=X2,fill = value))
ggplot(data = melt(y)) + geom_tile(aes(x=X1,y=X2,fill = value))

These two plots look the same, but they should look different!

like image 626
generic_user Avatar asked Jun 01 '17 18:06

generic_user


1 Answers

You need to set the limits of your scale bar to have certain colors and also define the mean value (the value in the middle) to be a same value for both plots.

rng = range(c((x), (y))) #a range to have the same min and max for both plots



ggplot(data = melt(x)) + geom_tile(aes(x=X1,y=X2,fill = value)) +
  scale_fill_gradient2(low="blue", mid="cyan", high="purple", #colors in the scale
                 midpoint=mean(rng),    #same midpoint for plots (mean of the range)
                 breaks=seq(-100,100,4), #breaks in the scale bar
                 limits=c(floor(rng[1]), ceiling(rng[2]))) #same limits for plots

ggplot(data = melt(y)) + geom_tile(aes(x=X1,y=X2,fill = value)) +
  scale_fill_gradient2(low="blue", mid="cyan", high="purple", 
                 midpoint=mean(rng),    
                 breaks=seq(-100,100,4),
                 limits=c(floor(rng[1]), ceiling(rng[2])))

This is the output:

like image 127
M-- Avatar answered Oct 06 '22 01:10

M--