我有一张基本的印度 map ,上面有州和边界,一些标签以及许多其他规格,都存储为gg对象。我想生成许多带有区域图层的 map ,这些 map 将包含来自不同变量的数据。

为了防止区域 map 覆盖州和国家/地区的边界,它必须位于所有先前的代码之前,我希望避免重复。

我以为可以通过按this answer调用gg对象的$layers来做到这一点。但是,它将引发错误。 Reprex如下:

library(ggplot2)
library(sf)
library(raster)

# Download district and state data (should be less than 10 Mb in total)

distSF <- st_as_sf(getData("GADM",country="IND",level=2))

stateSF <- st_as_sf(getData("GADM",country="IND",level=1))

# Add border

countryborder <- st_union(stateSF)

# Basic plot

basicIndia <- ggplot() +
  geom_sf(data = stateSF, color = "white", fill = NA) +
  geom_sf(data = countryborder, color = "blue", fill = NA) +
  theme_dark()

basicIndia
# Data-bearing plot

districts <- ggplot() +
  geom_sf(data = distSF, fill = "gold")

basicIndia$layers <- c(geom_sf(data = distSF, fill = "gold"), basicIndia$layers)

basicIndia
#> Error in y$layer_data(plot$data): attempt to apply non-function

预期结果

任何帮助将非常感激!

最佳答案

如果查看geom_sf(data=distSF),您会看到它是由两个元素组成的列表-您希望第一个元素包含图层信息,因此geom_sf(data = distSF, fill = "gold")[[1]]应该可以工作。

districts <- ggplot() +
  geom_sf(data = distSF, fill = "gold")

basicIndia$layers <- c(geom_sf(data = distSF, fill = "gold")[[1]], basicIndia$layers)

关于r - 在现有的geom_sf图层下方插入geom_sf图层,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53036873/

10-13 00:31