我正在使用 sf::world
制作地图,我只想在其中绘制欧洲、非洲、亚洲和大洋洲:
library(sf)
map = spData::world %>%
dplyr::filter(!continent %in% c("South America", "North America", "Antarctica"))
ggplot() +
geom_sf(data=map, aes(geometry=geom))
就目前的情况而言,俄罗斯和大洋洲的部分正在环绕并在图上留出大量空白。
我尝试了 this answer 中的 st_crop
的各种组合,以裁剪出空白:
st_crop(map, xmin=-30, xmax=180, ymin=-180, ymax=180)
但它似乎返回一张没有几何图形的空白地图。感觉解决方法就是简单的使用这个函数,但是我做不到。
答案 0 :(得分:1)
您可以使用此答案中提出的方法 https://stackoverflow.com/a/67977330/7756889
library(sf)
library(ggplot2)
map = spData::world %>%
dplyr::filter(!continent %in% c("South America", "North America", "Antarctica"))
# Russia only will not do; Fiji also crosses the antimeridean...
rossiya <- subset(map, iso_a2 %in% c("RU", "FJ"))
pacified_rossiya <- st_shift_longitude(rossiya)
rest_of_world <- subset(map, !iso_a2 %in% c("RU", "FJ"))
map2 <- rbind(pacified_rossiya,
rest_of_world)
plot(st_geometry(map2))
虽然它似乎在基本绘图中效果最好,但在应用于 ggplot2 时会崩溃。
答案 1 :(得分:1)
使用 tmap
的解决方案:
# packages
library(sf)
#> Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(tmap)
# data
map = spData::world %>%
dplyr::filter(!continent %in% c("South America", "North America", "Antarctica"))
# plot
tm_shape(map, bbox = c(-30, -60, 180, 90)) +
tm_polygons()
由 reprex package (v2.0.0) 于 2021 年 7 月 2 日创建
查看 ?tm_shape
的帮助页面了解更多详情。
编辑
正如@Jindra Lacko 所指出的,这里介绍的方法只是将矩形过滤器应用于地图,而没有解决反子午线附近的问题。