Объедините несколько карт в R, используя ggplot2 - PullRequest
0 голосов
/ 03 сентября 2018

Это воспроизводимый пример проблемы, с которой я сталкиваюсь. Я пытаюсь создавать карты с ggplot2 в несколько этапов. Вот проблема, с которой я сталкиваюсь. Рассмотрим данные border с полигонами штатов США на границе с Мексикой и border.county с полигонами округов в этих штатах. Следующий код позволяет вам получить данные:

library(maps)
library(ggmap)
library(ggplot2)

USA <- get_googlemap(center = 'usa', zoom = 4,  
                     style = 'administrative|element:labels|visibility:off')

us.df <- map_data("state") 
border <- subset(us.df, 
                 region %in% c("california","arizona","new mexico","texas"))

counties <- map_data("county")
border.county <- subset(counties,
                        region %in% c("california","arizona","new mexico","texas"))

Теперь я хочу создать карту с фоном карты из Google Maps, с полигонами штата и границами округа. Если я сделаю следующее, это будет работать аккуратно:

Allmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
               data=border,  color = "white") +
  geom_polygon(aes(x = long, y = lat,  group = group), 
               data=border.county, fill=NA, color="red") 

Теперь, если я хотел создать эту карту в несколько этапов, я столкнулся с проблемами. Мне просто нужны границы округа для справочной информации (как своего рода «повторяющаяся тема»), и я создам несколько карт с изменяющейся информацией на уровне штата. Поэтому я создаю «фоновую карту» с графствами, которая отлично работает:

Countmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat,  group = group), 
               data=border.county, fill=NA, color="red") 

А теперь я пытаюсь совместить это с картами состояний:

Statmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
               data=border,  color = "white") + 
  Countmap

Это дает мне ошибку:

 Error: Don't know how to add o to a plot

Как я могу решить это? Я могу комбинировать карты другим способом (как в: Statmap <- Countmap + geom_polygon(aes(x = long, y = lat, fill = region, group = group), data=border, color = "white")); однако это ставит округа под государственные границы.

Я также знаю, что у этой конкретной проблемы есть простое решение: сначала нарисовать карту с штатами, а на втором этапе объединить ее с графствами. Однако в моем реальном сценарии это не вариант, потому что текущая тема карты - это то, что нужно рисовать на втором месте: города и географические границы (например, границы моего округа здесь).

Это карта, которую я хочу создать:

enter image description here

1 Ответ

0 голосов
/ 03 сентября 2018

Если я правильно понимаю ваше описание, вы не хотите объединять карты . Вы хотите объединить слоев , в частности, чтобы наложить контуры округа на меняющиеся карты уровня штата.

Попробуйте это:

# define county outlines as a geom_polygon layer
county.layer <- geom_polygon(aes(x = long, y = lat, group = group),
                             data = border.county, fill = NA, color = "red")

# add county.layer as the last layer to your state-level map
Statmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
               data=border,  color = "white") +
  county.layer

Statmap

single-layer plot

Изменить в ответ на комментарий

Если у вас есть несколько слоев графства, поместите их в список:

border.county2 <- subset(counties, region %in% c("montana")) 

layer2 <- list(geom_polygon(aes(x = long, y = lat, group = group), 
                            data = border.county2, fill = NA, color = "blue"),
               geom_polygon(aes(x = long, y = lat, group = group), 
                            data = border.county, fill = NA, color = "red"))

Statmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
               data=border,  color = "white") +
  layer2

multi-layer plot

...