scale_fill_stepsn 中的 Ggplot 中心色标为零

Ggplot center color scale at zero in scale_fill_stepsn

工作数据

m=raster(ncol=10,nrow=10)
m[,]=runif(100, -0.8, 0.5)
tmp=data.table(as.data.frame(m,xy=TRUE))
ggplot()+ geom_tile(data = tmp, aes(x = x, y = y ,fill=layer)) +
scale_fill_stepsn(colors=c('#b2182b','#ef8a62','#fddbc7','#f7f7f7','#d1e5f0','#67a9cf','#2166ac'),n.breaks=10)

然而,这并不以零为中心,因为一些负值是蓝色的

我正在尝试绘制显示数据介于 -1 和 +1 之间的多个数字,但是大多数数字的数据并不以零为中心,因为正数据或负数据的范围更大。在图中,我希望正值显示为蓝色,正值显示为红色,并将 binnes 控制为 0.1 或 0.2。

如何以编程方式强制 scale_fill_stepsn 中的色标以零为中心,而不会一直摆弄中断?我尝试过 n.breaks 并尝试过 scale_fill_steps2,但我对色阶没有太多控制。

在我看来,以零为中心的对称比例可能是一个很好的解决方案。

library(raster)
library(data.table)
library(ggplot2)

set.seed(12345)
m <- raster(ncol=10,nrow=10)
m[,] <- runif(100, -0.8, 0.5)
tmp <- data.table(as.data.frame(m,xy=TRUE))
lmt <- ceiling(10*max(abs(range(tmp$layer))))/10

ggplot()+ 
  geom_tile(data = tmp, aes(x = x, y = y ,fill=layer)) +
  scale_fill_stepsn(colors=c('#b2182b','#ef8a62','#fddbc7',
                             '#f7f7f7','#d1e5f0','#67a9cf','#2166ac'),
             n.breaks=10, limits=c(-lmt,lmt), show.limits=T)