R ggplot2指向具有限制和异常值的形状连续比例(scale_fill_gradient)

时间:2015-10-08 16:32:31

标签: r ggplot2

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

link

提供了数据

这是我的代码

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)

我的结果,正如您所看到的(例如北加利福尼亚州),我的灰度值与异常值相对应: enter image description here

我看到两种解决方案:
第一个(不是我的首选)是用以下内容挤压代表范围内的数据:

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)+

正如jlhoward在引用this other question的评论中所建议的那样。 结束修改

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

0 个答案:

没有答案