Changing the upper limits for scale_fill_gradient2
also effects the colorscaling for values < 0 as the color distribution around 0 seems to be always symmetr
What you want is scale_fill_gradientn
. The arguments are not very clear (took me an hour or so to finally figure part of it out), though:
library("scales")
p + scale_fill_gradientn(colours = c("blue","white","red"),
values = rescale(c(-.1,0,.3)),
guide = "colorbar", limits=c(-.1,.3))
Which gives: