より一般的な解決策は、barplot()
によって生成されるx値に依存することができます。この方法では、(xとyの値ではなく)カウントだけを持つシナリオに対処できます。私はこのような変数を参照しています。ここでは、 "x"がカテゴリになっています(正確にはx軸の値はyの名前に対応しています)。
p.x <- c(8,12,14,9,5,3,2)
x <- sample(c("A","B","C","D","E","F","G"),
prob = p.x/sum(p.x),
replace = TRUE,
size = 200)
y <- table(x)
y
# A B C D E F G
# 27 52 46 36 21 11 7
あなたがbarplot()
を使用する場合は、あなたがあなたのラインを導くために、変数のバーのx位置(この場合はplot.dim
)を収集し、使用することができます
plot.dim <- barplot(y)
lines(plot.dim, y, col = "red", lwd = 2)
結果
今、あなたのデータに戻ってください。 xとyの両方を持っていても、barplotにはy変数だけが表示され、xはyのラベルに使われます。
x <- 20:1
y <- as.integer(22 - 1 * sample(seq(0.7, 1.3, length.out = length(x))) * x)
names(y) <- x
y <- y[order(as.numeric(names(y)))]
y値をもう一度プロットしてみましょう。 xpos変数のバープロット位置を収集します。
xpos <- barplot(y, las = 2)
最初のバー(X = 1)同様に1に位置していないことに注意してくださいは、最後のバーは23.5(としない20)に位置しています。
xpos[1]
# x=1 is indeed at 0.7
xpos[length(xpos)]
# x=20 is indeed at 23.5
回帰(たとえば、lm()
を使用)を実行しますか?最初と最後のx(yラベル)の予測y値を計算します。
lm.fit <- lm(y~as.numeric(names(y)))
y.init <- lm.fit$coefficients[2] * as.numeric(names(y))[1] + lm.fit$coefficients[1]
y.end <- lm.fit$coefficients[2] * as.numeric(names(y))[(length(y))] + lm.fit$coefficients[1]
あなたは今segments()
を使用して線を介してポーズが、xpos
に保存されている内容に応じて、あなたのxの値を設定することを忘れないでくださいすることができます。
segments(xpos[1], y.init, xpos[length(xpos)], y.end, lwd = 2, col = "red")
この博士ファンティーニいただきありがとうございます。私は自分のデータでこれを試してみました。しかし、直線を直線にする方法がある(すなわち、ビンの中心のまわりで跳ね返っていない)。私はデータ内の棒グラフを横断する線形回帰直線を作りたい。線がまっすぐであれば良いでしょう。 –
あなたの質問に答えるために私の答えが更新されました。確かにあなたは回帰を過度にすることができます。 barplot()関数が返すx値を必ず使用してください。 –