2011-12-13 19 views
5

Estoy intentando usar la facetación para generar múltiples mapas rellenos con valores diferentes.Cómo usar la facetación con geom_polygon para generar una grilla de mapas

He creado el ejemplo simplificado a continuación que reproduce tanto lo que intento hacer como el resultado que no espero de ggplot. Uso el mapa de los Estados Unidos y genero dos comunidades hipotéticas para los estados. Puedo trazar cada comunidad por separado, pero cuando trato de generar facetas y generarlas al mismo tiempo, solo obtengo un mapa.

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))) 

Lo ideal sería que la última trama debe tener dos mapas, uno que muestra la comunidad en la "A" y la otra que muestra la comunidad en la "B". En cambio, la trama solo muestra un mapa y no estoy seguro de qué se está asignando al relleno.

Respuesta

8

Usted acaba de especificar las facetas de la manera incorrecta. Hacerlo de esta manera en su lugar y que va a trabajar bien:

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

Gracias! ¿Por qué es posible especificar la estética de las "facetas" en 'aes()'? –

+0

Creo que funciona así porque el sistema de facetas, en sí mismo, no es en realidad una estética, sino un componente separado de la trama como la escala y las coordenadas. Entonces podría ser 'facet_grid',' facet_wrap', o potencialmente otros en el futuro, y esto no podría especificarse completamente con solo un mapeo estético estándar. –

Cuestiones relacionadas