【发布时间】:2018-10-28 23:11:42
【问题描述】:
我有一张印度的基本地图,其中包含州和边界、一些标签以及存储为 gg 对象的许多其他规范。我想生成一些带有区域图层的地图,这些地图将包含来自不同变量的数据。
为了防止地区地图覆盖州和国家边界,它必须在所有之前的代码之前,我想避免重复。
我想我可以按照this answer 为 gg 对象调用$layers 来做到这一点。但是,它会引发错误。代表如下:
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
预期结果
任何帮助将不胜感激!
【问题讨论】:
-
我想我错过了一些东西。既然你有 3 个独立的
sf对象,为什么不直接绘制地区 + 州 + 国家? -
这可能是我自己的无知。我有很多代码可以修改州和国家/地区的外观,这些代码不会改变并且必须重复。这在上面的代表中由
basicIndia表示。如果我这样做ggplot(districts) + basicIndia它会抛出一个错误,因为我正在绘制一个 gg 对象,而不是一个 df。我不知道如何存储部分 ggplot 以重新组合它们。