2011-12-13 12 views
5

Sto tentando di utilizzare la sfaccettatura per generare più mappe riempite con valori diversi.Come utilizzare la sfaccettatura con geom_polygon per generare una griglia di mappe

Ho creato l'esempio semplificato di seguito che riproduce sia quello che sto cercando di fare sia il risultato che non mi aspetto da ggplot. Io uso la mappa degli Stati Uniti e generi due comunità ipotetiche per gli stati. Posso tracciare ogni comunità separatamente, ma dove cerco di sfaccettarli e generarli allo stesso tempo, ottengo solo una mappa.

require(ggplot2) 
require(maps) 

map <- map_data("state") 
states <- unique(map$region) 

# generate some hypothetical communities  
runA <- data.frame(region=states, id="A", 
        community=rbinom(length(states),1,.5)) 
runB <- data.frame(region=states, id="B", 
        community=rbinom(length(states),1,.5)) 

membership <- rbind(runA, runB) 

# plot an individual map of communities from run A 
df <- merge(map, runA, by="region") 
ggplot(df) + 
    aes(long, lat, group=group) + 
    coord_equal() + 
    geom_polygon(aes(fill = as.factor(community))) 

# likewise for B 
df <- merge(map, runB, by="region") 
ggplot(df) + 
    aes(long, lat, group=group) + 
    coord_equal() + 
    geom_polygon(aes(fill = as.factor(community))) 

# now instead do one plot with two maps from facetting on id 
df <- merge(map, membership, by="region") 
ggplot(df) + 
    aes(long, lat, group=group, facets= id ~.) + 
    coord_equal() + 
    geom_polygon(aes(fill = as.factor(community))) 

Idealmente l'ultima trama dovrebbe avere due mappe, una che mostra la comunità in "A" e l'altro che mostrano la comunità in "B". Invece, la trama mostra solo una mappa e non sono nemmeno sicuro di cosa viene mappato sul riempimento.

risposta

8

Hai appena specificato le sfaccettature nel modo sbagliato. Fare in questo modo, invece, e che funzionerà bene:

ggplot(df) + 
    aes(long, lat, group=group) + 
    coord_equal() + 
    geom_polygon(aes(fill = as.factor(community))) + 
    facet_grid(facets= id ~.) 

enter image description here

+0

Grazie! Perché è possibile specificare l'estetica 'facets' in' aes() '? –

+0

Penso che funzioni in questo modo perché il sistema di sfaccettature, di per sé, non è in realtà un'estetica, ma una componente di trama separata come la scala e il coord. Quindi potrebbe essere 'facet_grid',' facet_wrap', o potenzialmente altri in futuro, e questo non potrebbe essere specificato completamente con una mappatura estetica standard. –