6

パーセント単位のシェア、さまざまなアイテムを表す列、さまざまなカテゴリで回答したインタビュー対象者のそれぞれのシェアを含むデータフレームがあります。積み上げ棒グラフを作成したい。

library(ggplot2)
library(reshape2)
 test<-data.frame(i1=c(16,40,26,18),
               i2=c(17,46,27,10),
               i3=c(23,43,24,10),
               i4=c(19,25,20,36))
 rownames(test)<-c("very i.","i.","less i.","not i.")

test.m<-melt(test)

ggplot(test.m, aes(x=variable, y=value, fill=value)) + 
   geom_bar(position="stack", stat="identity")

良さそうに見えますが
、a) バーを中央に配置します: 肯定的な回答 (非常に i. と i) を上に、下の 2 つのクラス (i. を減らして i. を除く) を下にします。
b) 各カテゴリ (very i、i、less i、not i) は同じ色を持ちます。

どんな助けでも大歓迎です。

4

2 に答える 2

12

行名の代わりにカテゴリ名をセパレータとして使用することをお勧めします。

test$category <- factor(c(3,4,2,1), labels=c("very i.","i.","less i.","not i."))

(因子レベルの順序付けは、積み上げ棒グラフ (最低: not i.、最高: very i.) に対して行われます。

test.m <- melt(test)

質問に答えるには:

  1. 一部の値が 0 より高く、他の値が 0 より低い場合、積み上げ棒グラフはうまく機能しません。したがって、2 つの別個の棒グラフが作成されます (1 つは負の値、もう 1 つは正の値)。
  2. 新しい列categoryは、fill各カテゴリを異なる色にマップするパラメータに使用されます。

完全なコード:

ggplot(test.m, aes(x=variable, fill=category)) + 
      geom_bar(data = subset(test.m, category %in% c("less i.","not i.")),
               aes(y = -value), position="stack", stat="identity") +
      geom_bar(data = subset(test.m, !category %in% c("less i.","not i.")), 
               aes(y = value), position="stack", stat="identity")

ここに画像の説明を入力

于 2012-11-16T20:02:11.053 に答える
10

この目的のために設計された別のツールはlikert()、HH パッケージにあります。この便利な関数は、リッカート、セマンティック ディファレンシャル、および評価スケール データに適した発散積み上げ棒グラフをプロットします。

library(HH)
# note use of t(test)[,4:1] to transpose and mirror dataframe for easy plotting
# test dataframe is otherwise unaltered from OP's question

likert(t(test)[,4:1], horizontal = FALSE,
       main = NULL, # or give "title",
       xlab = "Percent", # becomes ylab due to horizontal arg
       auto.key = list(space = "right", columns = 1,
                     reverse = TRUE))

ここに画像の説明を入力

の特に魅力的な機能の 1 つlikert()は、ReferenceZero 引数を使用してニュートラルな応答を中央に配置できることです。(参照応答に適切な灰色を使用する方法に注意してください):

likert(t(test)[,4:1], horizontal=FALSE,
       main = NULL, # or give "title",
       xlab = "Percent", # becomes ylab due to horizontal arg
       ReferenceZero = 3,
       auto.key=list(space = "right", columns = 1,
                     reverse = TRUE))

1 つの応答を中心としたリッカート データ

(これらの例では、一般的に垂直バーを使用していますがhorizontal=TRUE、多くの場合、特に質問や尺度の名前を含めたい場合は、より適切です。)

于 2012-12-04T15:58:45.940 に答える