2011-12-13 2 views
5

패싯을 사용하여 여러 값으로 채워진 여러 맵을 생성하려고합니다.geom_polygon에서 faceting을 사용하여 맵 그리드를 생성하는 방법

아래의 간단한 예제를 작성하여 ggplot에서 기대하지 않은 결과를 얻었습니다. 나는 미국의지도를 사용하여 주에 2 개의 가정적인 커뮤니티를 생성합니다. 나는 각 커뮤니티를 개별적으로 계획 할 수 있지만, 동시에 그 계획을 세우고 생성하려고 시도 할 때 하나의지도 만 얻습니다.

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

이상적으로 지난 줄거리는 두 개의지도, 하나는 "A"지역 사회를 보여주고, 다른 하나는 "B"지역 사회를 보여주는이 있어야합니다. 대신, 플롯은 하나의지도 만 표시하고 채우기에 매핑되는 것이 무엇인지 확실하지 않습니다.

답변

8

방금 ​​잘못 표시된면을 지정했습니다. 대신 이런 식으로 작업을 수행하고 그것을 잘 작동합니다 :

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

감사합니다! 'aes()'에서'facets' 미학을 지정할 수있는 이유는 무엇입니까? –

+0

필자는 패 시트 시스템 자체가 실제로는 미적인 것이 아니기 때문에 스케일 및 코디와 같은 별도의 플롯 구성 요소이기 때문에 이러한 방식으로 작동한다고 생각합니다. 따라서 'facet_grid','facet_wrap' 또는 미래에 잠재적으로 다른 것들이있을 수 있습니다. 그리고 이것은 표준 미학적 매핑으로는 완전하게 지정 될 수 없습니다. –