R ggplot2形状连续比例(比例填充梯度)上的点,带有限制和异常值

R ggplot2形状连续比例(比例填充梯度)上的点,带有限制和异常值,r,ggplot2,R,Ggplot2,我正在使用ggplot2将一些气候模拟绘制为世界地图上的光栅。 我给所表示的值设置一个连续的比例,在比例\填充\梯度()中设置一个范围。 这些映射不止一个,我需要使它们具有可比性:因此,我需要为所有表示的变量提供相同的范围。每个变量的大部分数据分布在(-1.5,1.5)范围内,这是我为量表选择的范围。 我的问题与异常值有关。使用这些设置,我将它们以中性色(灰色)显示在地图中,同时我希望用比例的最小/最大边界的相同颜色表示它们 有关资料可在本网站查阅 这是我的密码 library(rgdal) l

我正在使用ggplot2将一些气候模拟绘制为世界地图上的光栅。 我给所表示的值设置一个连续的比例,在比例\填充\梯度()中设置一个范围。 这些映射不止一个,我需要使它们具有可比性:因此,我需要为所有表示的变量提供相同的范围。每个变量的大部分数据分布在(-1.5,1.5)范围内,这是我为量表选择的范围。
我的问题与异常值有关。使用这些设置,我将它们以中性色(灰色)显示在地图中,同时我希望用比例的最小/最大边界的相同颜色表示它们

有关资料可在本网站查阅

这是我的密码

library(rgdal)
library(ggplot2)
library(raster)
library(grid)

setwd("myfolder")
world<-readOGR("TM_WORLD_BORDERS-0.3.shp", layer="TM_WORLD_BORDERS-0.3")
world=fortify(world, region="ISO3")

raster<-stack("d_spi24_neg45")
r_points = rasterToPoints(raster)
r_df = data.frame(r_points)

summary(r_df[,3])
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-3.30000 -0.30000  0.00000 -0.05307  0.20000  2.50000
ggplot(data=r_df) + 
geom_tile(aes(x=x,y=y, fill=d_spi24_neg45))+
scale_fill_gradient(limits=c(-1.5, +1.5), low="blue", high="red")+
coord_equal() +
theme_bw() +
theme(axis.line=element_blank(),
    axis.text.x=element_blank(),
    axis.text.y=element_blank(),
    axis.ticks=element_blank(),
    axis.title.x=element_blank(),
    axis.title.y=element_blank(),
    panel.grid.major = element_blank(),
    panel.background=element_blank(),
    panel.border=element_blank(),
    panel.grid.minor=element_blank(),
    plot.background=element_blank(),
    legend.position = "bottom",
    legend.text=element_text(size=10),
    legend.key.height=unit(0.25,"cm"),
    legend.key.width=unit(2,"cm"),
    legend.title=element_blank())+
geom_polygon(data = world, aes(x = long, y = lat, group=group), color = "black", 
           fill="transparent", size = 0.25)+ xlim(-165, 180) + ylim(-58,85)
正如jlhoward在提到的评论中所建议的那样结束编辑

第二个解决方案可能是以我的范围为中心的对数标度???接受建议。
谢谢

试试
scale\u fill\u gradient(…,oob=squish)
squish
来自
scales
软件包)。看,如果答案能解决你的问题,请在那里投票。嗨,霍华德。是的,至少在一定程度上是这样:它确实起到了作用,但结果与我建议的解决方案1相同。当然,这比我建议的要优雅得多。然而,我更感兴趣的是另一种方法,能够显示异常值的权重。这就是我建议使用对数刻度的原因。顺便说一句,我对你的评论和你提到的答案都给出了+1。
r_df$d_spi24_neg85[r_df$d_spi24_neg85 < -1.5] <- -1.5
r_df$d_spi24_neg85[r_df$d_spi24_neg85 > 1.5] <- 1.5
scale_fill_gradient(limits=c(-1.5, +1.5), low="blue", high="red", oob=squish)+