Добавьте строки ошибок, чтобы показать стандартное отклонение на графике в R
Для каждого значения X
вычислено среднее значение Y
и стандартное отклонение (sd
) каждого значения Y
x = 1:5
y = c(1.1, 1.5, 2.9, 3.8, 5.2)
sd = c(0.1, 0.3, 0.2, 0.2, 0.4)
plot (x, y)
Как я могу использовать стандартное отклонение для добавления баров ошибок к каждому набору данных моего сюжета?
Ответы
Ответ 1
Возникает проблема с решением csgillespie, когда у вас есть логарифмическая ось X. У вас будет другая длина маленьких баров справа и слева (эпсилон следует за значениями x).
Вам лучше использовать функцию errbar
из пакета Hmisc
:
d = data.frame(
x = c(1:5)
, y = c(1.1, 1.5, 2.9, 3.8, 5.2)
, sd = c(0.2, 0.3, 0.2, 0.0, 0.4)
)
##install.packages("Hmisc", dependencies=T)
library("Hmisc")
# add error bars (without adjusting yrange)
plot(d$x, d$y, type="n")
with (
data = d
, expr = errbar(x, y, y+sd, y-sd, add=T, pch=1, cap=.1)
)
# new plot (adjusts Yrange automatically)
with (
data = d
, expr = errbar(x, y, y+sd, y-sd, add=F, pch=1, cap=.015, log="x")
)
Ответ 2
Решение с ggplot2
:
qplot(x,y)+geom_errorbar(aes(x=x, ymin=y-sd, ymax=y+sd), width=0.25)
![enter image description here]()
Ответ 3
Вы можете использовать segments
, чтобы добавить бары в базовой графике. Здесь epsilon
управляет строкой по верхней и нижней части строки.
plot (x, y, ylim=c(0, 6))
epsilon = 0.02
for(i in 1:5) {
up = y[i] + sd[i]
low = y[i] - sd[i]
segments(x[i],low , x[i], up)
segments(x[i]-epsilon, up , x[i]+epsilon, up)
segments(x[i]-epsilon, low , x[i]+epsilon, low)
}
Как указывает @thelatemail, я действительно должен использовать векторизованные вызовы функций:
segments(x, y-sd,x, y+sd)
epsilon = 0.02
segments(x-epsilon,y-sd,x+epsilon,y-sd)
segments(x-epsilon,y+sd,x+epsilon,y+sd)
![enter image description here]()
Ответ 4
В дополнение к ответу @csgillespie, segments
также может использоваться для такого рода вещей:
plot (x, y, ylim=c(0,6))
segments(x,y-sd,x,y+sd)
epsilon <- 0.02
segments(x-epsilon,y-sd,x+epsilon,y-sd)
segments(x-epsilon,y+sd,x+epsilon,y+sd)
![enter image description here]()
Ответ 5
Вы можете использовать arrows
:
arrows(x,y-sd,x,y+sd, code=3, length=0.02, angle = 90)