2015-08-07 28 views
6

ggplot2'de bir veri değişkeni ile bir harita çizimini facet_wrap etmek istiyorum - ör. Aşağıdaki örnekte 'evcil hayvanlar'. Bu, her değişken kategorisi için müstahkem harita verilerinin tam olarak çoğaltılmasını gerektirir mi? Bu beni biraz aptalca vurur. Alternatif bir yöntem var mı?ggplot2 içinde facet_wrap ile haritalar

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' ağırlık/öncesi başvurmadan o ggplot içinde NZMG yaklaştırmak için iyi bir seçim ilk projelendirme! – hrbrmstr

cevap

13

, estetik biraz çimdik:

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

Teşekkürler Kaptan Amerika. Bu yöntemin farkında değildim – geotheory

İlgili konular