9

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!

0

1 Answer 1

22

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 the same 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:

Not the answer you're looking for? Browse other questions tagged or ask your own question.