在ggplot2中使用facet_wrap进行地图绘制

7

我希望能够在ggplot2中按照数据变量(例如下面的“pets”)进行地图绘制,使用facet_wrap。这是否需要为每个变量类别完全复制加固地图数据?这似乎有点愚蠢。是否存在其他替代方法?

require(ggplot2)
(nz_dat = data.frame(island = rep(c('North.Island ','South.Island '), 3),
           pets = c('cats','cats','dogs','dogs','birds','birds'),
           n = c(13, 26, 48, 74, 24, 17)))
             island  pets  n
1 North.Island   cats 13
2 South.Island   cats 26
3 North.Island   dogs 48
4 South.Island   dogs 74
5 North.Island  birds 24
6 South.Island  birds 17

nz = map_data("nz")
nz = subset(nz, nz$region %in% c('North.Island ','South.Island ')) # 2 main islands

# simple plot
ggplot(nz, aes(long, lat, group=group, fill=factor(region))) + 
  geom_polygon() + coord_quickmap()

enter image description here


“coord_quickmap” 是在 ggplot 中近似 NZMG 的好选择,而无需首先进行预投影! - hrbrmstr
1个回答

16

你可以稍微调整一下外观:

library(ggthemes) # for theme_map

gg <- ggplot()

# lay down a base map (no borders or fills)
# geom_map is a great way to do map layers like you would in any GIS
gg <- gg + geom_map(data=nz, map=nz,
                    aes(x=long, y=lat, map_id=region),
                    color="#00000000", fill="#0000000", size=0.5)

# since "island" equates to the "nz" map id of "region" use that
# to "map" (in the data operation sense) the value in "n" to the
# named polygon
gg <- gg + geom_map(data=nz_dat, map=nz,
                    aes(fill=n, map_id=island, color=n))

# it's highly unlikely these values needed a continuous scale
# so use a shortcut to colorbrewer with scale_*_distiller, scaling
# both the color & fill so there are no black borders
gg <- gg + scale_fill_distiller()
gg <- gg + scale_color_distiller()

# the OP did good here since it's better than Mercator for 
# NZ and NZMG coord system is not avail with coord_map()
gg <- gg + coord_quickmap()

# ggplot will make many maps!
gg <- gg + facet_wrap(~pets)

# ggplot will make clean maps!
gg <- gg + theme_map()

# put the legend wherever you want
gg <- gg + theme(legend.position="right")
gg

输入图片说明


1
谢谢美国队长。我之前不知道这个方法。 - geotheory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接