问题描述
我正在处理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创建