2012-07-06 3 views
4

막대 막대가 5 개인 막대 그래프를 만들고 있습니다. 채우기는 5 개 막대 중 3 개에 대해 예상대로 정렬되지만 3 번째 막대에서는 누적 세그먼트가 잘못된 순서로 표시됩니다. 이미지를 게시 할 수 없지만 세 번째 막대에는 막대의 맨 아래에 있어야하는 세그먼트가 맨 위에 표시됩니다.R ggplot2 스택 막대가 막대 하나를 잘못된 순서로 채 웁니다.

다음은 간단한 예제 코드입니다. 이 예제에서 x와 fill 변수의 조합 당 하나의 관찰 만 있지만, 실제로 수천 개의 관측치가있는 데이터 프레임의 코드를 사용하기 때문에 stat_summary 함수를 사용했습니다.

이 코드에는 어떤 문제가 있으며, 모든 막대가 올바른 순서로 채우기를 표시하도록하려면 어떻게해야합니까?

library(ggplot2) 
str(d2) 
d2 
ggplot(data=d2, aes(x=x,y=y, fill=f)) + stat_summary(fun.y="mean", geom="bar", position="stack") 
R.version 
packageVersion("ggplot2") 


> str(d2) 
'data.frame': 20 obs. of 3 variables: 
$ x: Factor w/ 5 levels "1CP","2PD","3AM",..: 1 1 1 1 2 2 2 2 3 3 ... 
$ y: num 0.3456 0.0699 0.6659 0.7358 0.3456 ... 
$ f: Ord.factor w/ 4 levels "N1"<"N2"<"N3"<..: 1 2 3 4 1 2 3 4 1 2 ... 
> d2 
     x   y f 
1  1CP 0.34556309 N1 
20021 1CP 0.06985134 N2 
25026 1CP 0.66592260 N3 
30031 1CP 0.73577575 N4 
2  2PD 0.34556309 N1 
20022 2PD 2.37410008 N2 
25027 2PD 0.74289404 N3 
30032 2PD 0.35221355 N4 
3  3AM 0.34556309 N1 
20023 3AM 0.80074871 N2 
25028 3AM 0.62036885 N3 
30033 3AM 0.09105373 N4 
4  4AP 0.34556309 N1 
20024 4AP 0.35911943 N2 
25029 4AP 0.12228402 N3 
30034 4AP 0.18667499 N4 
5  ALL 0.34556309 N1 
20025 ALL 0.97839760 N2 
25030 ALL 0.58666595 N3 
30035 ALL 0.36948221 N4 
> ggplot(data=d2, aes(x=x,y=y, fill=f)) + stat_summary(fun.y="mean", geom="bar", position="stack") 
> R.version 
      _           
platform  i386-pc-mingw32        
arch   i386           
os    mingw32          
system   i386, mingw32        
status   Patched          
major   2           
minor   15.1           
year   2012           
month   07           
day   04           
svn rev  59723          
language  R           
version.string R version 2.15.1 Patched (2012-07-04 r59723) 
nickname  Roasted Marshmallows       
> packageVersion("ggplot2") 
[1] ‘0.9.1’ 
> 

답변

2

또한이 솔루션 제공 ggplot2의 저자에 잠재적 인 버그로이 문제를보고 :

나는 이것이 버그인지 아닌지 잘 모르겠어요를 -하지만 당신은 얻을 수 있습니다 ggplot 함수 호출에 order=f을 추가하여 원하는 동작을 확인하십시오. 나는 그것이 왜 불이행하지 않는지 확신하지 못합니다.

order=f의 추가 제안으로 문제가 해결되었습니다.

관련 문제