2017-12-19 5 views
0

는,이 같은 음모를 얻을 :대체 바코드 배열 방법 (geom_bar)? 내가 ggplot를 사용하여 상자의 플롯을 플롯하면

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은 요인을 순서대로 인쇄하므로 아래 두 가지 해결책을 살펴볼 수도 있습니다.

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 사용