2016-05-28 3 views
0

私は53の州と性変数を持つデータフレームを持っています。例えば下のDFは26の状態を持っています。棒グラフで複数行とfacet_grid

set.seed(25) 
test <- data.frame(
    state = sample(letters[1:26], 10000, replace = TRUE), 
    sex = sample(c("M","F"), 10000, replace = TRUE) 
) 

は今、私はより多くの雌部材を有している状態を見たいので、私は、各状態のためのグリッドのバープロットを作成し、各グリッドには、二つのバー(M、F)を持っています。

test.pct = test %>% group_by(state, sex) %>% 
    summarise(count=n()) %>% 
    mutate(pct=count/sum(count)) 

ggplot(test.pct, aes(x=sex, y=pct, fill=sex)) + 
    geom_bar(stat="identity") + 
    facet_grid(. ~ state) 

これらの26個のグリッドはすべて1行で表示される問題です。 1X26の代わりに3X9など、複数のフレームでプロットを作成したいです。

また、州は女性の割合に基づいて発注する必要があります。

ありがとうございました。

答えて

0

問題#1:facet_wrapを使用してください。問題#2:状態レベルをあらかじめ並べ替えます。

それは次のようになります。

ggplot(transform(test.pct, state=factor(state, 
             levels=with(subset(test.pct, sex=="F"), 
                state[order(pct)]))), 
     aes(x=sex, y=pct, fill=sex)) + 
    geom_bar(stat="identity") + 
    facet_wrap(~ state, nrow = 3) 
0

最初の部分は簡単です:ちょうどfacet_wrapの代わりfacet_gridを使用しています。順序はやや複雑です。あなたは要因のレベルを並べ替える必要があります。ちょっと分かりやすくするために、私は操作をいくつかのステップに分けました。まず、女性割合のみを抽出し、その割合を求め、最後にその注文を使用して、stateの順位の並べ替えを行います。それは長続きする方法ですが、原則を明確にすることを願っています。

wom.pct <- test.pct %>% filter(sex == 'F') 
ix <- order(wom.pct$pct) 
test.pct$state <- factor(test.pct$state, levels = letters[1:26][ix]) 

ggplot(test.pct, aes(x=sex, y=pct, fill=sex)) + 
    geom_bar(stat="identity") + 
    facet_wrap(~ state) 
関連する問題