0

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

问题字符串前面连续有 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'问题文本' r0 1

9b'问题文本' r0 1

...

9a'问题文本'r1 2

...

11g'问题文本'r5 2

题目顺序正确:9a-h、10a-j、11a-g

但是最终图表中的顺序发生了奇怪的变化和反转(“coord_flip”导致水平条)。

上 > 下:9h-9a、11g-11a、10j-10a

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

任何帮助表示赞赏

谢谢,乔治

4

1 回答 1

0

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

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()

`在此处输入图像描述

于 2013-06-19T16:35:51.663 回答