Добавить столбец к данным, используемым с ggmap - PullRequest
0 голосов
/ 03 июля 2018

У меня есть файл формы статистических локальных областей (аналог почтового индекса) в Австралии. Вы можете загрузить его здесь , файл называется «Цифровые границы статистических локальных областей ASGC Ed 2011 в формате ESRI Shapefile» (на момент написания статьи это вторая ссылка).

Я пытаюсь отобразить соглашения об уровне обслуживания на графике ggmap, используя поле Население из вторичной таблицы для обеспечения сопоставления цветов. Вот что я получил до сих пор:

library(tidyverse)
library(ggmap)
library(rgdal)

pops <- read_csv('http://mm-c.me/work/SlaPopulations.csv', col_types = "ci")

slas <- readOGR(dsn="SLA",layer="SLA11aAust")

aus4 <- get_map("Australia",zoom=4)
ggmap(aus4)

ggmap(aus4)+
  geom_path(data=slas, color = "black", aes(x=long,y=lat, group = group))

#Create a copy so we don't accidentally break the original
slasextended <- slas

slasextended@data <- slasextended@data %>% 
  left_join(pops)

#Throws an error 
#Error in FUN(X[[i]], ...) : object 'Population' not found
ggmap(aus4)+
  geom_polygon(data=slasextended, 
               color = "black", 
               aes(x = long, 
                   y = lat, 
                   group = group, 
                   fill = Population)) 

Этот подход основан на таких вопросах, как этот , которые предлагают обрабатывать объект @data как фрейм данных, а затем добавлять к нему столбцы. Проблема в том, что ggmap не может найти данные для отображения.

Как мне это сделать? Я что-то делаю полностью отсталым или как-то?

1 Ответ

0 голосов
/ 03 июля 2018

В соответствии с учебником ggplot2 пространственные объекты должны быть преобразованы во фрейм данных для правильной работы с ggplot:

slasextended@data <- slasextended@data %>% 
  left_join(pops)
slasextended@data$id <- rownames(slasextended@data)
slasextended.points <- fortify(slasextended, region = "id")
slasextended.df <- left_join(slasextended.points, 
    slasextended@data, by = "id") 

Полученный стандартный фрейм данных slasextended.df следует использовать для дальнейшего построения вместо SpatialPolygonsDataFrame slasextended:

test_plot <- ggmap(aus4) +
  geom_polygon(data = slasextended.df, 
               color = "black", 
               aes(
                    x = long, 
                    y = lat, 
                    group = group, 
                    fill = Population)
               ) +
  scale_fill_distiller(palette = "Greens", 
    na.value = "white")

Надеюсь, это будет полезно.

...