2016-10-07 6 views
0

簡単な質問ですが、私はRの初心者ですので、少し驚いています。データ視覚化スキルを実践するために、Rでいくつかの円グラフを作成しようとしています。円グラフでの面取りR

私はこのようになり、データフレームを持っている:

carrier n_cancelled n_early n_ontime n_late 
    <chr>  <int> <int> <int> <int> 
1  9E  1044  54 12891 4471 
2  AA   636  16 26965 5112 
3  AS   2  12  606  94 
4  B6   466  155 41661 12353 
5  DL   349  36 39931 7794 
6  EV  2817  66 35646 15644 
7  F9   3  1  489 192 
8  FL   73  16  2321 850 
9  HA   0  1  317  24 
10  MQ  1234  53 19790 5320 
11  OO   3  0  23  6 
12  UA   686  22 45762 12195 
13  US   663  9 17444 2420 
14  VX   31  7  4231 893 
15  WN   192  0  8833 3250 
16  YV   56  2  387 156 

私が探しては、各キャリアのために、以下のような円グラフの数です。

looks like this

今私はこのようなコード...

status <- c("Cancelled", "Early", "On-Time", "Late") 
ggplot(counts_by_carrier, aes(x = factor(1), y = c(n_cancelled, n_early, n_ontime, n_late), fill = status)) + 
    geom_bar(width = 1, stat = "identity") + 
    coord_polar("y", start = 0) + 
    blank_theme + 
    facet_grid(facets=. ~ carrier) 

を持っている。しかし、それはエラーとして理にかなっているError: Aesthetics must be either length 1 or the same as the data (16): x, y, fill

を返します。私はそれをY値としてn_cancelledなどのすべての値のベクトルとして供給しています。そして、それを単一のpiechartで扱う方法はわかりません。

しかし、私はそれを修正する方法は現在私の外です。一度に1つの行だけを見て、すべての行に異なる行を印刷するようにするにはどうすればよいですか?

+1

写真はコード/データではなく、サンプルにデータを含める方法については、質問ページ(およびSO R FAQ /タグページ)に情報がありました。ワッフルチャートや単純な棒グラフも良い方法です。 – hrbrmstr

+1

まずデータを長い形式に変換する必要があります。例えば、 'reshape2 :: melt'や' tidyr :: gather'を使います。 'Carrier'はあなたのID列です(それを溶かさないでください)。次に、単一の残りの値列をyとして、変数列のみをxとして供給します。キャリアによるファセット –

答えて

0

,:その人はあなたを助けるために、実際に使用、例えば可能な形式でコメントし@docendoとして

df <- read.table(
    text = 
" carrier n_cancelled n_early n_ontime n_late 
1  9E  1044  54 12891 4471 
2  AA   636  16 26965 5112 
3  AS   2  12  606  94 
4  B6   466  155 41661 12353 
5  DL   349  36 39931 7794 
6  EV  2817  66 35646 15644 
7  F9   3  1  489 192 
8  FL   73  16  2321 850 
9  HA   0  1  317  24 
10  MQ  1234  53 19790 5320 
11  OO   3  0  23  6 
12  UA   686  22 45762 12195 
13  US   663  9 17444 2420 
14  VX   31  7  4231 893 
15  WN   192  0  8833 3250 
16  YV   56  2  387 156" 
) 

をあなたのデータを投稿してみてください、あなたは「長い」にデータを変換する必要があります: - のようなので、列ヘッダーが「転帰」のエントリーとなり、値がカウントになります

df %>% 
    gather("Outcome", "Count", - carrier) 

今だけ3つの列がありますどの:dplyr/tidyrを使用して、このような形式で、例えば、

carrier  Outcome Count 
1  9E n_cancelled 1044 
2  AA n_cancelled 636 
3  AS n_cancelled  2 
4  B6 n_cancelled 466 
5  DL n_cancelled 349 
6  EV n_cancelled 2817 

その後、あなたは(私は、各グループからの主要な "N_" を削除していることに注意してください)したいプロットを作るためにggplotためにその情報を渡すことができます:

df %>% 
    gather("Outcome", "Count", - carrier) %>% 
    mutate(Outcome = gsub("^n_","", Outcome)) %>% 
    ggplot(aes(fill = Outcome 
      , y = Count 
      , x = 1)) + 
    geom_bar(stat = "identity" 
      , position = "dodge") + 
    facet_wrap(~carrier 
      , scales = "free_y") + 
    xlab("") 

enter image description here

私はではありません。しかし、これを円グラフにしてください(あなたはそれを簡単に変換することができますが)。それらはほとんど決して良い考えではありません。データの視覚化を改善することが目標である場合は、円グラフを使用しないことを強くお勧めします。