【问题标题】:Split a map into two separate maps by latitude or longitude按纬度或经度将地图拆分为两个单独的地图
【发布时间】:2020-09-11 17:42:28
【问题描述】:

有没有办法将 ggplot2 地图分割成两个单独的地图?我有一张带有难以辨认的 ID 标签的大地图。我想将地图垂直分割成两个不同的地图,最好有一个重叠区域,这样每个多边形都会在至少一个地图中完整显示。

这是一个可重现的示例。我想将地图分成北纬 35 度的北地图,然后在北纬 35.5 度的南地图(两者的重叠在 35 和 35.5 之间)。 (虽然我意识到在这个例子中以另一种方式分割可能更有意义,但我的实际地图在垂直方向上很长。)

library(sf)
library(ggplot2)

sf_nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
plot <- ggplot2::ggplot(sf_nc) +
  geom_sf(aes(color = NAME)) +
  geom_sf_text(aes(label = NAME)) 

【问题讨论】:

  • 没有回答你的问题,但你不能忽略图例以获得更多空间并增加文本的大小吗?您的情节已经包含图例中包含的信息。

标签: r ggplot2 sf


【解决方案1】:

也许这就是你要找的。​​p>

  1. this post之后,我首先使用st_crop将sf df按纬度拆分,并提取南北地区的FIPS代码。
  2. 然后使用 FIPS 代码将 sf 数据帧一分为二,从而确保分界线上的区域在两个地图中都显示出来。
  3. 最后,我添加了一个 ID 并将两个 dfs 重新绑定在一起,以便使用 facet_wrap 轻松绘图
library(sf)
library(ggplot2)
library(dplyr)

sf_nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

# Get FIPS/regiona codes for north regions
south <- st_crop(sf_nc, xmin=-180, xmax=180, ymin=-90, ymax=35.5) %>% 
  pull(FIPS)

north <- st_crop(sf_nc, xmin=-180, xmax=180, ymin=35.5, ymax=90) %>% 
  pull(FIPS)

# Make sf df for north and south
sf_nc_1 <- filter(sf_nc, FIPS %in% south) %>% 
  mutate(id = "South")
sf_nc_2 <- filter(sf_nc, FIPS %in% north) %>% 
  mutate(id = "North")

# Bind together for using facet_wrap
sf_nc_split <- rbind(sf_nc_1, sf_nc_2)

ggplot2::ggplot(sf_nc_split) +
  geom_sf(aes(color = NAME)) +
  geom_sf_text(aes(label = NAME), size = 2) +
  guides(color = FALSE) +
  facet_wrap(~id, ncol = 1) +
  theme_void()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2014-04-01
    相关资源
    最近更新 更多