2017-08-31 4 views
0

通常、たとえば棒グラフなどの順序を変更する場合は、ggplot軸でreorder()関数を使用します。これはオプションですが、coord_flip()の後に私を混乱させることがあります。私はこのようなやり方が本当に好きではありません。私はむしろデータそのものを操作します。データフレームを配置してプロットの順序を操作する方法

マイデータフレーム:

library(tidyverse) 

warCasualties <- tibble(Who = c("N. Vietnam + communist allies", 
       "South Vietnam", 
       "Vietnamese civilians", 
       "United States", 
       "Allied forces"), 
     Type = c("Military", 
       "Military", 
       "Civilians", 
       "Military", 
       "Military"), 
     Estimated.deaths = c((950765 + 1100000)/2, 
          (110000 + 313000)/2, 
          2000000, 
          58220, 
          5341)) 

私は、次の操作を実行したいが、データフレームがないように私のプロットは注文しません。

warCasualties %>% 
    arrange(desc(Estimated.deaths)) %>% 
    ggplot(aes(x = Estimated.deaths, y = Who)) + 
    geom_segment(aes(x = 0, y = Who, xend = Estimated.deaths, yend = Who)) + 
    geom_point() 

答えて

2

あなたはそれのためにパッケージforcatsを使用することができますが、彼らはあなたに配置tibbleにapprearた順に因子のレベルを設定する関数fct_inorder()、です。 ggplot()は、軸の順序を決定する因子変数を探しています。因子でなければ、あなたが見ているアルファベット順を(黙って)as.factor()で補うことになります。

library(forcats) 

warCasualties %>% 
    arrange(desc(Estimated.deaths)) %>% 
    mutate(Who = forcats::fct_inorder(Who)) %>% 
    ggplot(aes(x = Estimated.deaths, y = Who)) + 
    geom_segment(aes(x = 0, y = Who, xend = Estimated.deaths, yend = Who)) + 
    geom_point() 

enter image description here

私はforcatstidyverseにロードされません理由はわかりません。

ggplot(warCasualties,aes(x = Estimated.deaths, y = reorder(Who, -Estimated.deaths))) + 
    geom_segment(aes(x = 0, y = reorder(Who, -Estimated.deaths), xend = Estimated.deaths, yend = Who)) + 
    geom_point() 

enter image description here

使用reorder(Who, -Estimated.deaths)が注文した人持っている:それはいくつかの素晴らしい要因ツールを持っており、この基本的なソリューションについてどうハドレーと株式会社

+1

私は、この解決策がtidyverse文法でロードされるべきであることに同意します。奇妙だけど。 – Tdebeus

+0

必要以上に依存関係をロードしないようにするため、ライブラリには明示的にロードする必要がある非コアのtidyverseパッケージ(forcatsなど)があります。 http://www.tidyverse.org/packages/ – batpigandme

0

によって構築されていますので、それは、素晴らしい追加になります高低から。

+0

はい、私はこのような問題を解決するために使用しましたが、データの観点からは別の方法があるのか​​疑問に思っていました。 – Tdebeus

関連する問題