0

25 の質問 (1 列目の「質問」) のリストを含むデータ フレーム (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="質問")

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

reorderx 軸を使用する必要があります。reorderたとえば、これを試してください。置換します。

aes(questions,..)

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

あなたは再現可能な例を挙げていないので、与えられた解決策からは確信が持てません。アンケート データを生成するためのコードを次に示します (データを生成するのに 30 分かかり、解決策を見つけるのに 1 分もかかりませんでした。次回はデータを再現してみてください)。

## 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 に答える