Как мне наложить прямоугольник с заданными координатами на карту?

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть карта с округами (показана ниже), и я пытаюсь наложить на нее прямоугольник.

Код для карты работает хорошо.

 states <- map_data("state")
pa_df <- subset(states, region == "pennsylvania")
counties <- map_data("county")
pa_county <- subset(counties, region == "pennsylvania")
head(pa_county)
pa_base <- ggplot(data = pa_df, mapping = aes(x = long, y = lat, group = group))   
  coord_fixed(1.3)   
  geom_polygon(color = "black", fill = "gray")
pa_map <-print( pa_base  
  geom_polygon(data = pa_county, fill = NA, color = "white")  
  geom_polygon(color = "black", fill = NA))
pa_map
  

Координаты для прямоугольника:

      left    bottom     right       top 
-77.04933  41.60288 -76.53023  41.24093 
  

Я пытался использовать это, но он просто показывает карту без ничего сверху.

 ggplot(pa_map)   
  geom_sf(xlim=-77.04933, ylim=41.60288, xmax=-76.53023, ymax=41.24093)
  geom_sf(fill = NA , color = "gray50", size = 0.5)

  

Что я получил обратно, так это:

Ошибка: data должен быть фрейм данных или другой объект, вызываемый с помощью fortify() , а не объект S3 с классом gg / ggplot

Я не уверен, что делать. Буду признателен за помощь. Я просто хочу поместить прямоугольник на карту, учитывая координаты, которые у меня есть.

Ответ №1:

Это может быть достигнуто следующим образом. Поместите координаты, определяющие прямоугольник, в dataframe и используйте этот df, чтобы добавить еще geom_polygon один слой к вашему графику следующим образом:

 library(ggplot2)
library(usmap)

states <- map_data("state")
pa_df <- subset(states, region == "pennsylvania")
counties <- map_data("county")
pa_county <- subset(counties, region == "pennsylvania")
head(pa_county)
#>            long      lat group order       region subregion
#> 64743 -77.44670 39.96954  2213 64743 pennsylvania     adams
#> 64744 -77.42952 39.98672  2213 64744 pennsylvania     adams
#> 64745 -77.37222 40.00391  2213 64745 pennsylvania     adams
#> 64746 -77.32065 40.01537  2213 64746 pennsylvania     adams
#> 64747 -77.23471 40.02683  2213 64747 pennsylvania     adams
#> 64748 -77.18887 40.03256  2213 64748 pennsylvania     adams
pa_base <- ggplot(data = pa_df, mapping = aes(x = long, y = lat, group = group))   
  coord_fixed(1.3)   
  geom_polygon(color = "black", fill = "gray")
pa_map <- pa_base  
  geom_polygon(data = pa_county, fill = NA, color = "white")  
  geom_polygon(color = "black", fill = NA)

rect <- data.frame(
  x = c(-77.04933, -76.5302, -76.5302, -77.04933),
  y = c(41.60288, 41.60288, 41.24093, 41.24093)
)

pa_map  
  geom_polygon(data = rect, aes(x, y, group = 1), fill = "red", color = "white")