scale_fill_stepsn 中的 Ggplot 中心色标为零

Her*_*rot 3 r ggplot2 colorbar

工作数据

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)
Run Code Online (Sandbox Code Playgroud)

然而,这并不以零为中心,因为一些负值是蓝色的 在此输入图像描述

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

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

Mar*_*dri 5

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

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 谢谢 Marco,我认为这是一个非常优雅的解决方案,因此读者可以看到一个漂亮的对称图例。但是我也可以将scale_fill_steps2与你的方法一起使用。 (2认同)