为 sf 对象的绘图设置色标限制

set color scale limits for plot of sf object

我想在相同的色标上绘制多个 sf 对象。在 raster 包中,有一个非常方便的 zlim 参数,您可以在其中指定颜色限制。但我不知道 sf::plot().

中的等价物是什么

在这里,我加载了一个 sf 多边形并创建了一个额外的虚拟变量来说明我的问题:

library(sf)
nc_sf <- st_read(system.file("shape/nc.shp", package="sf"))

nc_sf$AREA2 <- nc_sf$AREA * 2

range(nc_sf$AREA)
range(nc_sf$AREA2)

plot(nc_sf["AREA"])
plot(nc_sf["AREA2"])

这些图具有独立的色标。

我可以用 ggplot 做到这一点:

library(ggplot2)

fullrange <- range(c(nc_sf$AREA, nc_sf$AREA2))
fullrange

ggplot() + geom_sf(data = nc_sf, aes(fill = AREA), lwd = 0.5, color = 'black') + scale_fill_gradientn(colours = sf.colors(), limits = fullrange)
ggplot() + geom_sf(data = nc_sf, aes(fill = AREA2), lwd = 0.5, color = 'black') + scale_fill_gradientn(colours = sf.colors(), limits = fullrange)

但是我如何使用 sf::plot 做到这一点?

您可以使用自定义 breaks:

library(sf)
nc_sf <- st_read(system.file("shape/nc.shp", package="sf"))

nc_sf$AREA2 <- nc_sf$AREA * 2
fullrange <- c(nc_sf$AREA, nc_sf$AREA2)
mybreaks <- seq(min(fullrange), max(fullrange), by = diff(range(fullrange))/10) 
plot(nc_sf["AREA"], breaks=mybreaks)

plot(nc_sf["AREA2"], breaks=mybreaks)

reprex package (v0.3.0)

于 2020-07-08 创建