1

次のような一連のデータがあります。

col1  col2   col3   col4     cr
84  88.242  9.833   4.194     A
94  107.571 10.917  3.708     B
188 240.288 16.917  6.333     A
245 371.005 22.333  10.389    A
114 131.599 9.167   4.25      A
71  100.751 8.167   3         B
118 138.543 11.167  4.278     A
162 203.435 14.667  6.444     B
123 152.032 12.167  4.639     B
115 126.945 11.667  5.056     A
125 134.178 10      4.639     B
119 138.926 9.5     4.222     A
106 129.19  9.833   3.833     A
146 162.319 9.833   4.118     A

簡単なコマンドを使用してデータをプロットしようとしましたbarplotが、実際に必要なグラフが得られません。列ごとに 10 本のバー(各バーは 0 ~ X20、20 ~ 40などcolumn valuesの範囲を表す) のプロットを生成しようとしています。 . 異なる色で表示されます (Y 軸は頻度 % であるため、バーの高さは同じでなければならないことに注意してください)。Y% frequencyABA and B stacked

これは私が生成しようとしているものです

google_image_stacked_barplot

列ごとに 1 つのバー...これに使用するコマンドを考えてください。

(写真の軸の名前は無視してください。これは、Google で見つけた写真であり、必要なものを表しています)

ありがとう、

4

2 に答える 2

5

完全を期すために、これがggplot2ソリューションです(@AnandaMahtoのデータを使用して、dput出力に感謝します)。私はmelt最初に使用し、次に使用data.tableして比率を数えて取得します(基本的にすべての内部計算):

require(ggplot2)
require(reshape2)
require(data.table)

df.m <- melt(df, names(df)[5], names(df)[1:4])
dt <- data.table(df.m)
setkey(dt, "cr", "variable")
dt.m <- dt[, list(count = sum(value)), by=list(cr,variable)]
dt.m <- dt.m[, list(cr=cr, prop = count/sum(count)), by=variable]
p <- ggplot(data = dt.m, aes(factor(variable))) + 
         geom_bar(aes(group = cr, weights=prop, fill=cr))
p <- p + scale_fill_brewer(palette = "Set1")
p

ggplot2_barplot_stacked

于 2013-01-30T13:30:57.100 に答える
5

以下のように、コピーして貼り付けやすい形式でデータを投稿してください。

mydata <- structure(list(col1 = c(84L, 94L, 188L, 245L, 114L, 71L, 118L, 
162L, 123L, 115L, 125L, 119L, 106L, 146L), col2 = c(88.242, 107.571, 
240.288, 371.005, 131.599, 100.751, 138.543, 203.435, 152.032, 
126.945, 134.178, 138.926, 129.19, 162.319), col3 = c(9.833, 
10.917, 16.917, 22.333, 9.167, 8.167, 11.167, 14.667, 12.167, 
11.667, 10, 9.5, 9.833, 9.833), col4 = c(4.194, 3.708, 6.333, 
10.389, 4.25, 3, 4.278, 6.444, 4.639, 5.056, 4.639, 4.222, 3.833, 
4.118), cr = structure(c(1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 
1L, 2L, 1L, 1L, 1L), .Label = c("A", "B"), class = "factor")), .Names = c("col1", 
"col2", "col3", "col4", "cr"), class = "data.frame", row.names = c(NA, 
-14L))

今。あなたの質問に対処するために。最初aggregateにデータを取得し、それを に変換してからmatrix、行列の各値をその列の合計に対する比率として計算する必要があります ( を使用prop.table)。

mydataAgg <- aggregate(cbind(col1, col2, col3, col4) ~ cr, mydata, sum)
mydata2 <- as.matrix(mydata1[-1])
rownames(mydata2) <- mydataAgg[[1]]
mydata2
#   col1     col2    col3   col4
# A 1235 1527.057 110.250 46.673
# B  575  697.967  55.918 22.430
prop.table(mydata2, 2)
#        col1      col2      col3      col4
# A 0.6823204 0.6863103 0.6634851 0.6754121
# B 0.3176796 0.3136897 0.3365149 0.3245879

プロットは簡単です。

barplot(prop.table(mydata2, 2))

または、色付き:

barplot(prop.table(mydata2, 2), col = c("slateblue", "palevioletred"))

ここに画像の説明を入力

うーん。最も興味深いプロットではありませんが、プロポーションの明確なパターンは間違いないと思います....


lattice

@Arunggplot2は完全性の名の下に解決策を示しましたが、そうであれば、少なくともbarchart「格子」から追加する必要があります。;)

このために、prop.table(mydata2, 2)以前に計算した出力を転置する必要があります。

barchart(t(prop.table(mydata2, 2)), stack = TRUE, horizontal = FALSE)

結果は次のとおりです。

ここに画像の説明を入力

于 2013-01-30T12:28:17.487 に答える