ggplot,堆积条形图,x值的顺序混淆了

时间:2013-06-19 15:06:59

标签: r bar-chart

我有一个包含25个问题列表的数据框(mmt.ranking.sum_2)(第1列'问题')。

问题串连续前面是9a-h​​,10a-j,11a-g;即编号

对于每个问题,r0-r5(2.-7。栏目)的课程中都有答案计数

questions              r0 r1 r2 r3 r4 r5
9a 'question text'     1 1 0 8 3 8
9b 'question text'     1 0 2 7 7 4
...
9h 'question text'     1 6 4 7 3 0
10a 'question text'    ...
...
10j 'question text'    ...
...

11g 'question text'    ...

这是融化的&值被绘制成堆积条形图

  

df.melt< -melt(mmt.ranking.sum_2 [,1:7],id.vars =“questions”)

     

ggplot(df.melt,aes(questions,value,fill = variable))+ geom_bar()+ coord_flip()+ theme_bw()+ scale_fill_brewer()

在原始数据框中(见上文)&在融化的那个

问题变量值

9a'question text'r0 1

9b'question text'r0 1

...

9a'question text'r1 2

...

11g'question text'r5 2

问题的顺序是正确的:9a-h,10a-j,11a-g

但订单变化&在最终图表中奇怪地反转('coord_flip'导致水平条)。

top>下:9h-9a,11g-11a,10j-10a

任何想法为什么以及如何保持原始订单?

任何帮助表示赞赏

谢谢,Georg

1 个答案:

答案 0 :(得分:0)

你应该使用reorder reorder你的x轴,试试这个,例如,替换

aes(questions,..)

通过

aes(reorder(questions,as.numeric(gsub('([0-9]+).*','\\1', 
             df.melt$questions)),...)

不提供可重现的示例所以我无法确定给定的解决方案。这里有一些代码可以生成您的问卷数据(我花了30分钟来生成您的数据,不到一分钟就找到了解决方案,所以请在下次尝试重现数据。)

## 6 questions
N <- 6  
set.seed(123)
let <- sample(1:5,N,rep=TRUE)
qs <- lapply(seq(N),
       function(x){
         nn <- paste0(x,letters[1:20][seq(let[x])])
         somtext <- replicate(3,paste(sample(c(0:9, letters, LETTERS),
                      5, replace=TRUE),
               collapse=""))
         paste(nn,'question text',paste0(somtext,collapse=' '))

       })

questions <- unlist(qs)

dat <- matrix(sample(0:8,length(questions)*6,rep=TRUE),ncol=6)

colnames(dat) <- paste0('r',0:5)
dat <- data.frame(questions,dat)

library(reshape2)
df.melt <- melt(dat, id.vars="questions")

然后当我用它绘制它时:

ggplot(df.melt, aes(reorder(questions,as.numeric(gsub('([0-9]+).*','\\1', df.melt$questions)))
                    ,value, fill=variable)) +
  geom_bar(stat='identity')+ 
  theme_bw()+ 
  coord_flip() +
  scale_fill_brewer()

`enter image description here