我有一个包含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
答案 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()
`