2017-12-12 9 views
1

reorder()関数を使ってggplotではなくデータフレーム内でチャートを並べ替えるのが大好きです。この戦術はほとんどの時間で動作しますが、何も変更しなくても、ggplotは値をソートしません

DATAFRAMEアルファベット順にチャート注文chages ...:

library(tidyverse) 

most_used_words %>% 
    arrange(desc(times_used)) %>% 
    top_n(5) 

A tibble: 20 x 2 
     word times_used 
     <chr>  <int> 
1  news  148 
2  fake  147 
3  people  133 
4 country   95 
5  tax   92 

most_used_words %>% 
    arrange(desc(times_used)) %>% 
    top_n(5) %>% 
    ggplot(aes(x = word, y = times_used)) + 
    geom_col(fill = "#03A9F4") + 
    coord_flip() 

次のコードは、ggplotで正しくtimes_used変数をソートしますが...

most_used_words_candidate %>% 
     arrange(desc(times_used)) %>% 
     top_n(5) 

    # A tibble: 20 x 2 
       word times_used 
      <fctr>  <int> 
1 realdonaldtrump  965 
2   trump  762 
3   people  489 
4   hillary  435 
5   america  350 

most_used_words_candidate %>% 
    arrange(desc(times_used)) %>% 
    top_n(5) %>% 
    ggplot(aes(x = word, y = times_used)) + 
    geom_col(fill = "#03A9F4") + 
    coord_flip() 
+0

私はあなたが必要なものであるすべての() ''ここではリオーダーを使用して表示されません。 data.frame自体の行の順序はまったく重要ではありません。プロット順序を決定する要素のレベルの順序であり、 'reorder()'を使って変更するのが最も簡単な方法です。私はあなたが本当にここで尋ねていることを理解していません。あなたはすでに正しい答えを知っているようです。 – MrFlick

+0

しかし、奇妙なことは、2番目のプロットがデータを正しくソートすることです。しかし、どちらも同じコードで構成されています。 – Tdebeus

+4

あなたの2つの例の 'word'変数は、異なる変数型です。最初はそれが文字であり、2番目は文字です。私の推測では、第2の例の因子のレベルは、すでに所望の順序である。最初の例で同じ動作をさせるには、プロットする前に因子に変換し、レベルの順序を設定します。 – aosmith

答えて

2

@ oosmithが正しいです。 ggplotは入力をレベルのある要素として想定しています。これが、2番目のコードが正しく注文された理由です。これを試すと、

df$word <- factor(df$word , levels=unique(df$word)) 

となり、最初のコードを再プロットします。あなたの好きなようにアルファベット順に並べます。

は、いくつかの resource here

関連する問題