8

次のコードでこのプロットを作成しました。

library(ggplot2); library(reshape2); library(plyr)

likert <- data.frame(age = c(rep("young", 5), rep("middle", 5), rep("old", 5)),
                     score1 = c(rep("unlikely", 1), rep("likely", 1), rep("very likely", 13)),
                     score2  = c(rep("disagree", 6), rep("neutral", 4), rep("agree", 5)),
                     score3 = c(rep("no", 5), rep("maybe", 7), rep("yes", 3)))

meltedLikert <- melt(dlply(likert, .(age), function(x) llply(x, table)))

names(meltedLikert) <- c("score", "count", "variable", "age")

ggplot(meltedLikert[meltedLikert$variable != "age",], aes(variable, count, fill=score)) + 
  geom_bar(position="dodge", stat="identity") +
  geom_text(data=data.frame(meltedLikert), aes(variable, count, group=score, label=meltedLikert$score), size=4) +
  facet_grid(age ~ .)

ここに画像の説明を入力

位置テキストにラベルを付けて、各バーscoreの上部の対応するバーの上に各ラベルを配置するにはどうすればよいvariableですか?

4

1 に答える 1

18

リンクされた質問の回答に従って、呼び出しに追加position = position_dodge(width=0.9)するとgeom_text、値が整列します。

ggplot(meltedLikert[meltedLikert$variable != "age",], 
       aes(variable, count, fill=score)) + 
  geom_bar(position="dodge", stat="identity") +
  geom_text(data=data.frame(meltedLikert), 
            aes(variable, count, group=score, label=meltedLikert$score), 
            position = position_dodge(width=0.9),
            size=4) +
  facet_grid(age ~ .)

ここに画像の説明を入力

ただし、他のいくつかのことも指摘したいと思いました。通話では使用meltedLikert$scoreしないでください。aes()として渡されたデータ フレーム内のもののみを参照する必要がありますdata。また、meltedLikertはすでに であるdata.frameため、これを呼び出すdata.frame()必要はありません (害はありませんが)。

本当の改善点は、最初に集計を作成する方法にあります。代わりにこれを考慮してください:

tabulatedLikert <- ldply(likert[-1], function(sc) {
  as.data.frame(table(age = likert$age, score = sc))
})
ggplot(tabulatedLikert, aes(x=.id, y=Freq, fill=score)) +
  geom_bar(position="dodge", stat="identity") +
  geom_text(aes(label=score), position=position_dodge(width=0.9), size=4) +
  facet_grid(age ~ .)

ここに画像の説明を入力

元のデータでバーを修正することで、バーの順序を修正できます。

likert2 <- mutate(likert,
                  score1 = factor(score1, levels=c("unlikely", "likely", "very likely")),
                  score2 = factor(score2, levels=c("disagree", "neutral", "agree")),
                  score3 = factor(score3, levels=c("no", "maybe", "yes")))
tabulatedLikert2 <- ldply(likert2[-1], function(sc) {
  as.data.frame(table(age = likert2$age, score = sc))
})
ggplot(tabulatedLikert2, aes(x=.id, y=Freq, fill=score)) +
  geom_bar(position="dodge", stat="identity") +
  geom_text(aes(label=score), position=position_dodge(width=0.9), size=4) +
  facet_grid(age ~ .)

ここに画像の説明を入力

もちろん、この時点では、すべてがグラフ上で直接ラベル付けされているため、色は実際には何も追加しません。したがって、それらを完全に削除します。

ggplot(tabulatedLikert2, aes(x=.id, y=Freq, group=score)) +
  geom_bar(position="dodge", stat="identity", fill="gray70") +
  geom_text(aes(label=score), position=position_dodge(width=0.9), size=4) +
  facet_grid(age ~ .)

ここに画像の説明を入力

于 2013-08-29T20:20:38.570 に答える