ggplot2 heatmap with fixed scale colorbar between graphs
You need to set the same range (limits of color bar) for all of them and also specify the colors.
rng = range(matrixA, matrixB, matrixC)
And add this to your ggplot
code:
g + scale_fill_gradient2(low="green", mid="lightblue", high="red", #colors in the scale
midpoint=mean(rng), #same midpoint for plots (mean of the range)
breaks=seq(0,1,0.25), #breaks in the scale bar
limits=c(floor(rng[1]), ceiling(rng[2])))
Example:
Below is an example that helps you to get what you want:
x <- matrix(60:85, 5)/100
y <- matrix(65:95, 5)/100
z <- matrix(50:100, 5)/100
rng = range(c((x), (y), (z)))
library(reshape)
library(ggplot2)
ggplot(data = melt(x)) + geom_tile(aes(x=X1,y=X2,fill = value)) +
scale_fill_gradient2(low="green", mid="lightblue", high="red", #colors in the scale
midpoint=mean(rng), #same midpoint for plots (mean of the range)
breaks=seq(0,1,0.25), #breaks in the scale bar
limits=c(floor(rng[1]), ceiling(rng[2]))) + #same limits for plots
ggtitle("X")
ggplot(data = melt(y)) + geom_tile(aes(x=X1,y=X2,fill = value)) +
scale_fill_gradient2(low="green", mid="lightblue", high="red",
midpoint=mean(rng),
breaks=seq(0,1,0.25),
limits=c(floor(rng[1]), ceiling(rng[2]))) +
ggtitle("Y")
ggplot(data = melt(z)) + geom_tile(aes(x=X1,y=X2,fill = value)) +
scale_fill_gradient2(low="green", mid="lightblue", high="red",
midpoint=mean(rng),
breaks=seq(0,1,0.25),
limits=c(floor(rng[1]), ceiling(rng[2]))) +
ggtitle("Z")
This will give you: