我有一个基本的印度地图,带有各个州和边界、一些标签以及许多其他规格存储为gg对象。我想生成许多带有区级别图层的地图,它将承载来自不同变量的数据。
为了防止区域地图覆盖州和国家边界,必须在所有之前的代码之前放置它,而我希望避免重复。
我认为我可以通过调用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
预期结果
非常感谢您提供的任何帮助!
basicIndia
表示。如果我执行ggplot(districts) + basicIndia
,它会抛出一个错误,因为我正在绘制一个gg对象,而不是一个df。我不知道如何存储ggplot的部分以重新组合它们。 - Fons MA