R中的Chloropleth地图看起来很奇怪

时间:2017-10-02 13:35:07

标签: r ggplot2 maps

我有大约25,000人拥有完整邮政编码的数据集。我正试图在FSA级别创建加拿大地图,但似乎总是得到奇怪的结果。如果有人能指出我的错误发生在哪里或者我错过了什么,我将不胜感激。

library(rgeos)
library(maptools)
library(ggplot2)

fsas = readShapeSpatial('./Resources/FSA/gfsa000a11a_e.shp')

data = fortify(fsas, region = 'CFSAUID')
data$fsa = factor(data$id)
data$id = NULL

df$fsa = substr(df$Postal, 1, 3)

prvdr_cts = data.frame(table(df$fsa)) ; names(prvdr_cts) = c('fsa', 'ct')

plot.data = merge(data, prvdr_cts, by = 'fsa')

ggplot(plot.data, aes(x = long, y = lat, group = group, fill = ct)) +
    geom_polygon() +
    coord_equal()

这是我的结果 mymap

我从“前向分拣区域”下的http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/bound-limit-2011-eng.cfm获取了我的地图文件。 df有两列Person ID和FSA。

1 个答案:

答案 0 :(得分:0)

在我忘记group = group之前,我已经看到过类似的问题了(正如@ r.bot所指出的那样),但正如你所知,我不知道是不是因为你的形状文件是'重新使用非常详细。

我建议尝试sf包来加载已使用readShapePoly取代的shapefile。这样做的好处是速度更快,您不需要fortify()。我还简化了shapefile,使绘图更快。最后,您需要ggplot2的开发版本才能使用新的geom_sf()(ATOW):

install.packages(c("rmapshaper", "sf", "devtools"))
devtools::install_github("tidyverse/ggplot2")    
library("ggplot2")

fsas = sf::read_sf("gfsa000a11a_e.shp")
fsas = rmapshaper::ms_simplify(fsas, keep = 0.05)

ggplot(fsas) + geom_sf()

Final plot