Использование facet_grid для построения нескольких пространственных полигонов с общим полигоном в качестве наложения - PullRequest
2 голосов
/ 19 февраля 2020

Я хочу построить пространственные данные из SpatialPolygonDataframe. Более конкретно, я хочу построить отдельные пространственные объекты на отдельных участках, используя facet_grid() из ggplot2. Кроме того, я хотел бы построить общий пространственный многоугольник как оверлей в каждой из граней.

Вот пример, использующий набор пространственных данных США и отдельных штатов. Каждое состояние (подмножества) должно отображаться в одном фасете), тогда как контур США (представленный в другом наборе пространственных данных) должен быть нанесен в виде наложения в каждом фасете. С моей текущей попыткой контур США также разделен (на основе идентификатора) и распределен по граням:

library(sf)
library(ggplot2)

usa <- as(st_as_sf(maps::map(database="usa",fill=T, plot =FALSE)),"Spatial")
usa_states <- as(st_as_sf(maps::map(database="state",fill=T, plot =FALSE)),"Spatial")
usa_states <- usa_states[c(1:5),]

ggplot(data=usa_states)+
  geom_polygon(data=usa, aes(x = long, y = lat,group=id), 
               size = 1, colour = "red",fill=NA)+
  geom_polygon(data=usa_states, aes(x = long, y = lat,group=id), 
               size = 0.3, fill = "green",color="black",alpha=0.2)+
  facet_grid(facets= id ~.)

Как я могу указать, что fact_grid учитывает только 'id' набора данных usa_states и не разделяется вверх по плану США?

enter image description here

1 Ответ

2 голосов
/ 19 февраля 2020

Вот решение. Нет необходимости преобразовывать sf в sp. Вы можете использовать функцию geom_sf. Проблема заключалась в том, что ваши значения id имеют одинаковые имена в обоих наборах данных.

library(sf)
library(ggplot2)
library(dplyr)

usa <- st_as_sf(maps::map(database="usa",fill=T, plot =FALSE))
usa_states <- st_as_sf(maps::map(database="state",fill=T, plot =FALSE))
usa_states <- usa_states[c(1:5),]

usa_states <- usa_states %>% 
  rename(id = ID)

ggplot(data = usa_states)+
  geom_sf(size = 0.3, fill = "green",color="black",alpha=0.2)+
  geom_sf(data = usa ,
               size = 1, colour = "red",fill=NA) +
  facet_wrap(~ id)

enter image description here

...