2017-12-12 21 views
1

항상 데이터 프레임에서 reorder() 함수를 사용하는 ggplot 대신 차트를 정렬하고 싶습니다.이 전략은 대부분의 경우 작동하지만 때로는 아무 것도 변경하지 않더라도, 알파벳 순서로 차트 주문 chages ...ggplot은 값을 정렬하지 않습니다

Dataframe :

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

그러나 이상한 것은 두 번째 줄거리가 데이터를 올바르게 정렬한다는 것입니다. 그러나 둘 다 동일한 코드로 구성됩니다. – Tdebeus

+4

두 예제의'word' 변수는 다른 변수 유형입니다. 처음에는 문자이고 두 번째 문자는 요소입니다. 제 생각에 두 번째 예제의 요소에있는 수준은 이미 원하는 순서대로되어 있습니다. 첫 번째 예제에서 동일한 동작을 얻으려면 인자로 변환하고 플로팅하기 전에 레벨 순서를 설정하십시오. – aosmith

답변

2

@aosmith가 옳습니다. ggplot은 입력을 수준이있는 요인으로 간주합니다. 그것이 두 번째 코드가 올바르게 주문 된 이유입니다. 이것을 시도하는 경우

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

첫 번째 코드를 다시 플롯하십시오. 원하는대로 알파벳순으로 주문합니다.

일부 resource here