下面是{{3}}关于箱线图的问题和{{3}}关于制作印度地图的问题,在处理地图的各个图层时,如何避免ggplot中的代码重复?
以下是reprex。我认为最简单的方法是: 1.保存带有州和国界的基本地图 2.添加区域层(显示变量)。
想象一下,对许多变量重复执行步骤2。
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 country border
countryborder <- st_union(stateSF)
# STEP 1: Basic plot
basicIndia <- ggplot() +
geom_sf(data = stateSF, color = "white", fill = NA) +
geom_sf(data = countryborder, color = "blue", fill = NA) +
theme_dark()
# STEP 2: Adding the data layer underneath so it doesn't cover the other borders
indiaMap$layers <- c(geom_sf(data = distSF, fill = "red")[[1]], indiaMap$layers[[2:3]])
indiaMap$layers <- c(geom_sf(data = distSF, fill = "gold")[[1]], indiaMap$layers[[2:3]])
indiaMap
但是,以这种方式,您无法对附加层进行很小的修改,例如添加其他标题。以下内容显然行不通,但可以说明我的意思。
basicIndia$layers <- c(
geom_sf(data = distSF, aes(fill = GINI), color = "white", size = 0.2)[[1]] +
labs(title = "Gini coefficient"),
basicIndia$layers)
我以错误的方式处理问题吗?这是无法完成的事情吗?
答案 0 :(得分:1)
解决该问题的另一种方法是使用ggplot_build()
。
使用以下方法制作ggplot_build
对象:
indiaBuild <- ggplot_build(basicIndia)
我们现在可以使用:
indiaBuild$plot$layers <- c(indiaBuild$plot$layers,
geom_sf(data=distSF, fill='gold')[[1]])
您可以更改ggplot_build
对象的各个部分,然后包括标题:
indiaBuild$plot$labels$title <- 'Gini coefficient'
完成后,您只能使用p <- indiaBuild$plot