如何在 R 中使用 Mollweide 投影和 sf/rnaturalearth/ggplot 旋转世界地图?

问题描述

我想使用以太平洋地区(特别是澳大利亚)为中心的 Mollweide 投影在 R 中绘制世界地图,使用 rnaturalearth --> sf --> {{1} } 管道。

我遇到了在全球范围内连接线路的烦人问题。

从新的 R 会话中,我运行

ggplot

生成这个图

enter image description here

这是我的library(tidyverse) library(rnaturalearth) library(rnaturalearthdata) library(sf) target_crs <- st_crs("+proj=moll +x_0=0 +y_0=0 +lat_0=0 +lon_0=133") worldrn <- ne_countries(scale = "medium",returnclass = "sf") %>% sf::st_transform(crs = target_crs) ggplot(data = worldrn,aes(group = admin)) + geom_sf()

sessionInfo()

另一种选择

然后,从一个新的会话中,我还尝试了使用 Robinson 投影和 GDAL 推荐的 here 方法,即裁剪地球,重新测量经度,然后将它们全部缝合在一起。但是,出于某种原因,连接线仍然存在。顺便说一下,在第二个示例中,我从 Natural Earth

下载了国家/地区图层
R version 4.1.0 (2021-05-18)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.7

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] sf_0.9-8                rnaturalearthdata_0.1.0 rnaturalearth_0.1.0     forcats_0.5.1           stringr_1.4.0           dplyr_1.0.7             purrr_0.3.4             readr_1.4.0             tidyr_1.1.3            
[10] tibble_3.1.2            ggplot2_3.3.5           tidyverse_1.3.1        

loaded via a namespace (and not attached):
 [1] tidyselect_1.1.1   lattice_0.20-44    haven_2.4.1        colorspace_2.0-2   vctrs_0.3.8        generics_0.1.0     utf8_1.2.1         rlang_0.4.11       e1071_1.7-7        pillar_1.6.1       glue_1.4.2        
[12] withr_2.4.2        DBI_1.1.1          sp_1.4-5           dbplyr_2.1.1       modelr_0.1.8       readxl_1.3.1       lifecycle_1.0.0    rgeos_0.5-5        munsell_0.5.0      gtable_0.3.0       cellranger_1.1.0  
[23] rvest_1.0.0        class_7.3-19       fansi_0.5.0        broom_0.7.8        Rcpp_1.0.6         KernSmooth_2.23-20 scales_1.1.1       backports_1.2.1    classInt_0.4-3     jsonlite_1.7.2     farver_2.1.0      
[34] fs_1.5.0           hms_1.1.0          stringi_1.6.2      grid_4.1.0         cli_3.0.0          tools_4.1.0        magrittr_2.0.1     proxy_0.4-25       crayon_1.4.1       pkgconfig_2.0.3    ellipsis_0.3.2    
[45] xml2_1.3.2         reprex_2.0.0       lubridate_1.7.10   assertthat_0.2.1   httr_1.4.2         rstudioapi_0.13    R6_2.5.0           units_0.7-1        compiler_4.1.0    

产生这个数字

enter image description here

library(ggplot2) library(dplyr) library(ggthemes) library(sp) library(rgdal) # assumes you are in the ne_110m... directory # split the world and stitch it back together again system("ogr2ogr world_part1.shp ne_110m_admin_0_countries.shp -clipsrc -180 -90 0 90") system("ogr2ogr world_part2.shp ne_110m_admin_0_countries.shp -clipsrc 0 -90 180 90") system('ogr2ogr world_part1_shifted.shp world_part1.shp -dialect sqlite -sql "SELECT ShiftCoords(geometry,360,0),admin FROM world_part1"') system("ogr2ogr world_0_360_raw.shp world_part2.shp") system("ogr2ogr -update -append world_0_360_raw.shp world_part1_shifted.shp -nln world_0_360_raw") proj_str <- "+proj=robin +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs" my_prj <- sp::CRS(proj_str) world <- rgdal::readOGR("world_0_360_raw.shp","world_0_360_raw") %>% sp::spTransform(my_prj) %>% ggplot2::fortify() ggplot(data = world,mapping = aes(x = long,y = lat)) + geom_map(map = world,mapping = aes(map_id = id),fill = "khaki",colour = "black",size = 0.25) + coord_equal() + theme_map() + theme(plot.background = element_rect(fill = "azure2")) 对于第二个示例:

sessionInfo()

如果您能帮助我摆脱这些线条,我将不胜感激!理想情况下,通过 R version 4.1.0 (2021-05-18) Platform: x86_64-apple-darwin17.0 (64-bit) Running under: macOS Catalina 10.15.7 Matrix products: default BLAS: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.dylib LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib locale: [1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] rgdal_1.5-23 sp_1.4-5 ggthemes_4.2.4 dplyr_1.0.7 ggplot2_3.3.5 loaded via a namespace (and not attached): [1] magrittr_2.0.1 tidyselect_1.1.1 munsell_0.5.0 lattice_0.20-44 colorspace_2.0-2 R6_2.5.0 rlang_0.4.11 fansi_0.5.0 stringr_1.4.0 tools_4.1.0 grid_4.1.0 gtable_0.3.0 [13] utf8_1.2.1 DBI_1.1.1 withr_2.4.2 ellipsis_0.3.2 assertthat_0.2.1 tibble_3.1.2 lifecycle_1.0.0 crayon_1.4.1 purrr_0.3.4 vctrs_0.3.8 glue_1.4.2 stringi_1.6.2 [25] compiler_4.1.0 pillar_1.6.1 generics_0.1.0 scales_1.1.1 pkgconfig_2.0.3 拥有以太平洋为中心的世界地图将是最简单的解决方案,但这似乎并不存在?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)