2011-12-13 18 views
5

我正在嘗試使用構面生成多個填充了不同值的地圖。如何使用geom_polygon進行構面生成地圖網格

我已經創建了下面的簡化示例,它重現了我想要做的以及我不期望從ggplot得到的結果。我使用美國地圖,併爲各州生成兩個假想社區。我可以分別繪製每個社區,但我試圖在同一時間生成它們,我只能獲得一張地圖。

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`美學? – 2011-12-13 20:18:53