代码之家  ›  专栏  ›  技术社区  ›  Mark R

使用geom_sf()删除地球仪上不需要的网格线

  •  1
  • Mark R  · 技术社区  · 5 月前

    以下代码为地球的另一侧创建网格线。我怎样才能只抑制那些线条,而不是所有的网格?

    library(tmap)
    library(sf)
    library(dplyr)
    library(ggplot2)
    
    world.sf <- World # from tmap
    world.sf %>% 
      filter(continent == "Africa") %>% 
      st_transform("+proj=chamb +lat_1=22 +lon_1=0 +lat_2=22 +lon_2=45 
                   +lat_3=-22 +lon_3=22.5 +datum=WGS84 +type=crs") %>% 
      ggplot() + 
      geom_sf(aes(fill = economy))
    
    1 回复  |  直到 5 月前
        1
  •  1
  •   Tim G    5 月前

    受此启发 great answer this 我们可以先删除网格线,然后再添加自定义线。 我提到了这张照片

    out1 Source

    雷斯

    res

    与以前相比

    before

    library(tmap)
    library(sf)
    library(tidyverse)
    data("World")
    
    crs <- "+proj=chamb +lat_1=22 +lon_1=0 +lat_2=22 +lon_2=45 +lat_3=-22 +lon_3=22.5 +datum=WGS84 +type=crs"
    len <- 200
    lat_seq <- seq(40, # latitude from __
                   -40,  # latitude until
                   len = len)
    lon_seq <- seq(-20, # longitude from |
                   60, # longitude until
                   len = len)
    
    latlon <- st_multilinestring(
      c(lapply(seq(-20, 
                   60, 
                   20), # adjust step size 
               \(lon) cbind(rep(lon, len), lat_seq)),
        lapply(seq(40, 
                   -40, 
                   -20), # adjust step size 
               \(lat) cbind(lon_seq, rep(lat, len))))
    ) |> 
      st_sfc(crs = "WGS84") |> 
      st_sf() |> 
      st_transform(crs)
    
    # Plot
    World %>% 
      filter(continent == "Africa") %>% 
      st_transform(crs) %>% 
      ggplot() +
      theme(panel.grid.major = element_blank()) +
      geom_sf(data = latlon, 
              linewidth = 0.3, # adjust as needed
              color = "white") +
      geom_sf(aes(fill = economy))