4

我正在制作带有 5 个条形的堆叠条形图。对于 5 个条中的 3 个,填充按预期排序,但在第 3 个条中,堆叠段的显示顺序错误。我不允许发布图片,但在第三栏,应该在栏底部的部分显示在顶部。

这是一个简化示例的代码。在示例中,每个 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’
> 
4

1 回答 1

2

我还将这个问题作为一个潜在的错误报告给 的作者ggplot2,他提供了这个解决方案:

我不确定这是否是错误 - 但您可以通过添加 order=f到 ggplot 函数调用来获得所需的行为。我不确定为什么它不默认。

建议的添加order=f解决了问题!

于 2012-08-28T17:02:11.870 回答