2013-03-25 4 views
4

ggplot2에서 막대를 플로팅하는 동안 요소 변수의 올바른 순서에 문제가 있습니다. 두 개의 geom_bars를 원본 데이터 집합의 하위 집합과 함께 사용하고 있습니다 (두 개의 수준 'A'와 'B'가있는 변수 g).두 개의 geom_bar() 및 계수 변수의 순서가 잘못되었습니다.

요인 변수의 원래 순서를 유지하려면 어떻게해야합니까? 내 var가 숫자 일 때 문제가 없지만 x는 factor 여야한다고 가정합니다.

library(plyr) 
library(ggplot2) 

dane<-data.frame(x=1:10,y=seq(-5,4),g=rep(c('A','B'),each=5)) 
    dane$x<-as.factor(dane$x) 

     ggplot(data=dane,aes(x=x,y=y,fill=g)) + 
     geom_bar(subset=.(g=='A'),stat='identity') + 
     geom_bar(subset=.(g=='B'),stat='identity') 

하고

WrongOrder

편집 결과 :

여기 내 코드입니다 내가 라이브러리 코드를 복사하는 것을 잊었다.

+0

이것은이 실시 예의 단순화 된 버전은 원하는 출력 생성 협조 할 것 같다 (덴마크, AES (X가의 X, Y가 = g) 작성, Y가 =) 'ggplot을 + geom_bar을 (stat = "identity")'. – bdemarest

+0

하위 집합이 요인 수준을 엉망으로 만들 수 있다고 생각합니다. 이것은 나에게 잘못된 행동으로 느껴집니다. 그것은 무엇이든 상관없이 수준의 순서를 존중해야합니다. github에서이 문제와 관련된 문제를 찾아보십시오. – joran

+0

@bdemarest 예일뿐입니다. 나는 하나의 geom_bar 만 사용할 수 있다는 것을 알고 있지만 실제로는 여러 번 가질 필요가 있습니다. – Maciej

답변

3

나는 github (정말로 빠르다, 나는 인상 지우 게되었다 :) :)에 관한 대답을 얻었다. Brian Diggs는 내 문제를 해결하기 위해 scale_x_discrete(drop = FALSE)을 사용하도록 제안했습니다. Here's the link to my github report and solution. 이제 결과는 내가 원했던 것입니다.

ggplot(data=dane,aes(x=x,y=y,fill=g)) + 
    geom_bar(subset=.(g=='A'),stat='identity') + 
    geom_bar(subset=.(g=='B'),stat='identity') + 
    scale_x_discrete(drop=FALSE) 

enter image description here

+0

(+1) 여기에 다시 작성해 주셔서 감사합니다. – Arun

+0

다른 사람들이이 포스트를 유용하게 사용하기를 바랍니다. ;) – Maciej

관련 문제