2011-12-13 3 views
5

ファセットを使って異なる値で塗りつぶされた複数のマップを生成しようとしています。geom_polygonでファセットを使ってマップのグリッドを生成する方法

私は、私がやろうとしていることと、ggplotから期待していない結果を再現する以下の簡単な例を作成しました。私は米国の地図を使って、州の2つの仮説的コミュニティを生成します。私はそれぞれのコミュニティを別々にプロットすることができますが、同時にそれらを面取りして生成しようとすると、私は1つのマップしか得られません。

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」のコミュニティを示す1と「B」のコミュニティを示す他のを持っている必要があります。代わりに、プロットは1つのマップのみを表示し、塗りつぶしにマップされているものが何であるかもわかりません。

答えて

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()'に 'facet'という美学を指定するのはなぜ可能ですか? –

+0

私はそれがファセッティングシステム自体が実際に美的ではなく、スケールとコードのような別のプロットコンポーネントであるため、そのように機能すると思います。したがって、これは 'facet_grid'、' facet_wrap'、または将来的に他のものになる可能性があります。これは、標準の美的マッピングだけでは完全に指定することはできません。 –

関連する問題