假设我有美国的sf类型的形状数据。
sf
usa <- giscoR::gisco_get_countries(country="USA") # nrow(usa) is 1
现在giscoR包提供的usa数据包括阿拉斯加和一些太平洋岛屿。有没有办法从整个形状中提取连续的USA作为较小的sf数据?或者我可以在ggplot + geom_sf框架内绘制连续的USA吗?
giscoR
usa
ggplot
geom_sf
azpvetkf1#
您可以使用sf::st_crop将坐标修剪为您选择的任何坐标,然后按您喜欢的方式绘制。下面是使用ggplot的完整reprex:
sf::st_crop
giscoR::gisco_get_countries(country = "USA") |> sf::st_crop(c(xmin = -125, xmax = -60, ymin = 20, ymax = 60)) |> ggplot2::ggplot() + ggplot2::geom_sf() #> Warning: attribute variables are assumed to be spatially constant throughout all #> geometries
创建于2023-05-18带有reprex v2.0.2
e5nszbig2#
您描述的输出-国家级别的单行数据-是 * 国家 * 的预期行为(即。国家级数据。阿拉斯加和太平洋岛屿(我想是夏威夷)都是美国的一部分。要单独获得较低的48个,您可能希望从次国家行政单位开始,例如美国各州,并根据需要过滤它们。{tigris}包是一个很好的地方。所以考虑这段代码:
{tigris}
library(tidyverse) library(tigris) library(sf) states <- states(cb = FALSE, resolution = '20m') %>% filter(!STUSPS %in% c('HI', 'AK', 'PR', 'GU', 'VI', 'AS', 'MP')) %>% select(NAME, STUSPS) ggplot(data = states) + geom_sf() + geom_sf_label(aes(label = STUSPS)) + theme_void()
准备好48个状态对象后,可以通过dplyr::summarise()调用将其合并为单个多多边形几何体。
dplyr::summarise()
lower_48 <- states %>% summarise() ggplot(data = lower_48) + geom_sf()
2条答案
按热度按时间azpvetkf1#
您可以使用
sf::st_crop
将坐标修剪为您选择的任何坐标,然后按您喜欢的方式绘制。下面是使用ggplot
的完整reprex:创建于2023-05-18带有reprex v2.0.2
e5nszbig2#
您描述的输出-国家级别的单行数据-是 * 国家 * 的预期行为(即。国家级数据。阿拉斯加和太平洋岛屿(我想是夏威夷)都是美国的一部分。
要单独获得较低的48个,您可能希望从次国家行政单位开始,例如美国各州,并根据需要过滤它们。
{tigris}
包是一个很好的地方。所以考虑这段代码:
准备好48个状态对象后,可以通过
dplyr::summarise()
调用将其合并为单个多多边形几何体。