R是否可以在ggplot + geom_sf图表中包含组定义的圆?

问题描述

我正在处理ggplot + geom_sf地图,其中显示城市,此外,我想说明这些城市属于特定区域。 简而言之,我想绘制一个圆(与geom_encircle()相比),将城市组合成一个区域(例如“西部”)。 enter image description here enter image description here

不幸的是,我最终无法通过geom_encircle()获得理想的结果。 您对我如何进行有想法/提示吗?

基础地图数据是一个sf对象(几何类型:Multipolygon,尺寸XY), 城市数据是一个科幻对象(几何类型:点,尺寸XY),其中包括一列“区域”,该列将定义哪些城市应作为一组圈起来。

从中提取地图数据(德国) https://opendata.arcgis.com/datasets/2842f834961b4702a179bdcb08f7b6c9_0.zip?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D 可以从ESRI Deutschland下载shapefile“Bundesländer2018 mit Einwohnerzahl”。 转换使用以下代码进行: Deutschland <- st_read("xn--Bundeslnder_2018_mit_Einwohnerzahl-h4c","LAN_ew_18")

城市数据来自Google地图(经度和纬度),并通过“地区”条目进行了扩展(对不起,我无法上传csv文件,因此请参见csv屏幕截图)。 enter image description here 在R中的处理过程如下:

Cities <- read.csv("Cities_regions.csv")
Cities_sf <- st_as_sf(Cities,coords = c("Long","Lat"),crs = 4326)
Cities_crs <- st_transform(Cities_sf,crs = crs(Deutschland,asText=TRUE))

绘制地图和城市数据的过程如下:

ggplot(Deutschland) + 
geom_sf(fill="#D9D9D9",col="#A6A6A6",lwd=0.1) + 
geom_sf(data = Cities_crs,size = 1,col = "black") + 
coord_sf()

在这里,我陷入了困境,因为geom_encircle需要X和Y美观度,到目前为止我还无法正确指定。 你有提示吗?

最好的问候, 克里斯多夫(Christoph)

解决方法

我不确定100%的预期输出是什么,但也许以下方法可以工作:

# packages
library(sf)
#> Linking to GEOS 3.8.0,GDAL 3.0.4,PROJ 6.3.1
library(ggplot2)
library(ggalt)

# geodata
deutschland <- st_read("C:/Users/Utente/Downloads/xn--Bundeslnder_2018_mit_Einwohnerzahl-h4c/LAN_ew_18.shp") %>% 
  st_transform(crs = 4326)

# city data
cities <- data.frame(
  standort = c("koln","bielefeld","dusseldorf","karlsruhe","frankfurt","munchen","hannover"),lat = c(50.9578353,52.0149397,51.2385861,49.0159405,50.1213479,48.155004,52.3797505),lon = c(6.8272405,8.3805278,6.6742684,8.3394944,8.4964819,11.4717963,9.6914321),region = c("W","W","S","N"),stringsAsFactors = FALSE
)

# plot
ggplot(cities,aes(x = lon,y = lat)) + 
  geom_sf(data = deutschland,fill="#D9D9D9",col="#A6A6A6",lwd = 0.1,inherit.aes = FALSE) + 
  geom_point(size = 1,col = "black") + 
  geom_encircle(data = cities,aes(group = region,col = region))

reprex package(v0.3.0)于2020-10-27创建