2017-12-19 7 views
0

私はggplotを使用してボックスプロットをプロットすると、私はこのようなプロットを得る:バープロット(geom_bar)を配置する別の方法は?

plot before making additional data frame

使用Rコード:

ggplot(nin) + geom_bar(aes(Planner.Group.No)) 

をしかし、私はバーが小さいに大きい値から行きたかったですので、私はこれらの追加のコードを書いた

b <- data.frame(table(x = nin$Planner.Group.No)) 
b <- arrange(b, Freq) 

ggplot(b, aes(x = reorder(x, -Freq), y = Freq)) + geom_bar(stat = "identity") 

Desired plot

追加のコード行を避けることができるggplotの代替方法があるのだろうかと思います。そう、

Planner.Group.No Order.Status 
1    P0B  Finished 
2    P0C  Finished 
3    P0C  Finished 
4    P0A  Finished 
5    P0C  Finished 
6    P0B  Finished 
7    P0C  Finished 

答えて

1

あなたはscale_x_discreteあなたが好きな順序でのxの値のベクトルのlimitsパラメータを渡すことができます:ここで

ninデータセットのサンプルです

library(ggplot2) 

nin <- data.frame(Planner.Group.No = c("P0B", "P0C", "P0C", "P0A", "P0C", "P0B", "P0C"), 
        Order.Status = c("Finished", "Finished", "Finished", "Finished", "Finished", "Finished", "Finished"), 
        stringsAsFactors = FALSE) 

ggplot(nin, aes(Planner.Group.No)) + 
    geom_bar() + 
    scale_x_discrete(limits = names(sort(-table(nin$Planner.Group.No)))) 

2

ggplot2は要因を順番に表示しますので、以下の2つの解決策もご覧ください。

df <- read.table(text = "Planner.Group.No Order.Status 
1    P0B  Finished 
2    P0C  Finished 
3    P0C  Finished 
4    P0A  Finished 
5    P0C  Finished 
6    P0B  Finished 
7    P0C  Finished", header = TRUE) 
df 


library(tidyverse) # for ggplot2 and forcats 

# using factors 
ggplot(df, aes(x = factor(Planner.Group.No, 
          levels = names(sort(table(Planner.Group.No), decreasing = T))))) + 
    geom_bar() 

# using factors with forcats: 
ggplot(df, aes(x = fct_reorder(f = Planner.Group.No, 
           x = Planner.Group.No, 
           fun = length, 
           .desc = TRUE))) + 
    geom_bar() 
:一つは baseから factor、私も好きで、私はカスタムオーダー機能を使用する必要があるとき、その柔​​軟性のかなり頻繁に使用 forcatsから他の用途を fct_reorder、使用しています
関連する問題