我有一张基本的印度 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/