、我々は(すべての読者は、この部分をスキップして次のにジャンプすることができます)を行うことができます。
set.seed(0) ## `set.seed` for reproducibility
dat <- sample(5, 10 , replace = TRUE)
colors <- c('yellow','violet','green','pink')
h <- as.matrix(prop.table(table(dat)))
## compute x-location of the centre of each bar
H <- apply(h, 2L, cumsum) - h/2
## add text to barplot
bc <- barplot(h, horiz = TRUE, axes = FALSE, col = colors)
text(H, bc, labels = paste0(100 * h, "%"))
すべての読者の場合
ここで、アイデアを消化するための包括的な例を作成します。
ステップ1:実験のためのパーセントのおもちゃの行列を生成
## a function to generate `n * p` matrix `h`, with `h > 0` and `colSums(h) = 1`
sim <- function (n, p) {
set.seed(0)
## a positive random matrix of 4 rows and 3 columns
h <- matrix(runif(n * p), nrow = n)
## rescale columns of `h` so that `colSums(h)` is 1
h <- h/rep(colSums(h), each = n)
## For neatness we round `h` up to 2 decimals
h <- round(h, 2L)
## but then `colSums(h)` is not 1 again
## no worry, we simply reset the last row:
h[n, ] <- 1 - colSums(h[-n, ])
## now return this good toy matrix
h
}
h <- sim(4, 3)
# [,1] [,2] [,3]
#[1,] 0.43 0.31 0.42
#[2,] 0.13 0.07 0.40
#[3,] 0.18 0.30 0.04
#[4,] 0.26 0.32 0.14
ステップ2:積み重ね棒グラフを理解し、各積み重ね棒グラフ
の「中間の高さ」を取得
積み上げ棒グラフの場合、棒の高さは、各列の累積合計がh
です。
H <- apply(h, 2L, cumsum)
# [,1] [,2] [,3]
#[1,] 0.43 0.31 0.42
#[2,] 0.56 0.38 0.82
#[3,] 0.74 0.68 0.86
#[4,] 1.00 1.00 1.00
現在、各積み重ね棒グラフのミッド/センターを取得するために戻ってh/2
をシフト:
H <- H - h/2
# [,1] [,2] [,3]
#[1,] 0.215 0.155 0.21
#[2,] 0.495 0.345 0.62
#[3,] 0.650 0.530 0.84
#[4,] 0.870 0.840 0.93
ステップ3:縦棒グラフの場合は塗りつぶされた数字
と棒グラフを生成します、上記のH
は、各積み重ねバーの中心の座標をy
とします。 x
座標はbarplot
(不可視)によって返されます。 text
を使用しているとき、我々は複製x
の要素nrow(H)
回のそれぞれに必要なことを、注意してください:横棒グラフの場合
x <- barplot(h, col = 1 + 1:nrow(h), yaxt = "n")
text(rep(x, each = nrow(H)), H, labels = paste0(100 * h, "%"))
、
H
は上記
x
が中心の座標できます積み重ねられた各バーの
y
座標は
barplot
(不可視)によって返されます。
text
を使用しているとき、我々は
y
さんの各要素に
複製へ
nrow(H)
回を必要とすることに、注意してください。
ここ
y <- barplot(h, col = 1 + 1:nrow(h), xaxt = "n", horiz = TRUE)
text(H, rep(y, each = nrow(H)), labels = paste0(100 * h, "%"))
すごいですよ。いい答えだ! – useR