【问题标题】:set color scale limits for plot of sf object为 sf 对象的绘图设置色阶限制
【发布时间】:2020-07-08 14:37:58
【问题描述】:

我想在相同的色标上绘制多个 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 做到这一点?

【问题讨论】:

    标签: r sf


    【解决方案1】:

    您可以使用自定义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 年 7 月 8 日创建

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 1970-01-01
      • 2018-10-18
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2021-06-02
      相关资源
      最近更新 更多