在与ggmap一起使用的数据中添加一列

时间:2018-07-03 06:21:13

标签: r shapefile ggmap

我在澳大利亚有一个统计局部区域的形状文件(类似于邮政编码)。您可以下载here,文件名为“ ESRI Shapefile格式的统计本地区域ASGC Ed 2011数字边界”(在撰写本文时,它是第二个链接)。

我正在尝试使用辅助表中的“人口”字段在ggmap图上映射SLA,以提供颜色映射。到目前为止,这是我得到的:

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)) 

此方法基于this one之类的问题,该问题建议将@data对象视为数据框,然后向其添加列。问题是似乎ggmap找不到用于显示的数据。

我该怎么做?我是在做某种完全落后的事情吗?

1 个答案:

答案 0 :(得分:1)

根据ggplot2 tutorial,应将空间对象转换为数据框以与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")

希望,这会有所帮助。