2015-08-07 15 views
6

Chciałbym facet_wrap mapę mapę przez zmienną danych w ggplot2 - np. "zwierzęta" w poniższym przykładzie. Czy wymaga to pełnego powielenia wzmocnionych danych map dla każdej kategorii zmiennych? Byłoby to trochę głupie. Czy istnieje alternatywna metoda?Mapy z facet_wrap w ggplot2

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

+0

'coord_quickmap' był dobry wybór dla zbliżenia NZMG w ggplot w/o uciekania się do pre- projektowanie najpierw! – hrbrmstr

Odpowiedz

13

można podkręcić trochę estetyki:

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 

enter image description here

+1

Dzięki Captain America. Nie wiedziałem o tej metodzie – geotheory

Powiązane problemy