在 R 中是否可以在 ggplot + geom_sf 图表中包含组定义的圆圈?
Is it possible in R to include group-defined circles in a ggplot + geom_sf chart?
我正在制作 ggplot + geom_sf 地图,其中显示城市,此外,我想说明城市属于特定区域。
简而言之,我想画圈(相当于 geom_encircle()),将城市放在一个区域(例如“西部”)。
enter image description here
enter image description here
不幸的是,我没有用 geom_encircle() 得到想要的结果。
你有 ideas/hints 我该如何继续吗?
底层地图数据为sf对象(几何类型:Multipolygon,维度XY),
城市数据是一个 sf 对象(几何类型:点,维度 XY),包括一个名为 'region' 的列,该列应定义哪些城市应被包围为一个组。
地图数据(德国)提取自
https://opendata.arcgis.com/datasets/2842f834961b4702a179bdcb08f7b6c9_0.zip?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D
可以从 ESRI Deutschland 下载形状文件“Bundesländer 2018 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 美学,而我目前无法正确指定。
你有什么提示吗?
此致,
克里斯托夫
我不是 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", "W", "S", "S", "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 创建
我正在制作 ggplot + geom_sf 地图,其中显示城市,此外,我想说明城市属于特定区域。 简而言之,我想画圈(相当于 geom_encircle()),将城市放在一个区域(例如“西部”)。 enter image description here enter image description here
不幸的是,我没有用 geom_encircle() 得到想要的结果。 你有 ideas/hints 我该如何继续吗?
底层地图数据为sf对象(几何类型:Multipolygon,维度XY), 城市数据是一个 sf 对象(几何类型:点,维度 XY),包括一个名为 'region' 的列,该列应定义哪些城市应被包围为一个组。
地图数据(德国)提取自
https://opendata.arcgis.com/datasets/2842f834961b4702a179bdcb08f7b6c9_0.zip?outSR=%7B%22latestWkid%22%3A3857%2C%22wkid%22%3A102100%7D
可以从 ESRI Deutschland 下载形状文件“Bundesländer 2018 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 美学,而我目前无法正确指定。 你有什么提示吗?
此致, 克里斯托夫
我不是 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", "W", "S", "S", "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 创建