【问题标题】:Prevent spData::world countries from wrapping around the map / cropping map area防止 spData::world 国家环绕地图/裁剪地图区域
【发布时间】:2021-07-02 11:01:38
【问题描述】:

我正在使用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)

但它似乎返回了一张没有几何图形的空白地图。感觉解决方法就是简单的使用这个函数,但是我到不了。

【问题讨论】:

    标签: r ggplot2 sf


    【解决方案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 时会崩溃。

    【讨论】:

      【解决方案2】:

      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 所指出的,这里介绍的方法只是将矩形过滤器应用于地图,而没有解决反子午线附近的问题。

      【讨论】:

      • 你切断了楚科奇与俄罗斯的联系,把斐济一分为二;围绕 antimeridean 的环绕未解决,但被 bbox 隐藏
      • 感谢您的关注,我添加了评论。
      • 谢谢你 - 这是一个很好的答案,但我不能接受它,因为我有点需要整个俄罗斯都在图中。
      猜你喜欢
      • 2021-05-11
      • 2020-10-08
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多