r точечная диаграмма с планками погрешностей в обоих направлениях

Как я могу создать точечную диаграмму с планками погрешностей в двух направлениях? Обычно планки погрешностей расположены в вертикальном направлении (т. е. неопределенность значения y). Однако мои данные также имеют неопределенность в значении x.

X      ErrX   Y     ErrY
1.0    0.1    3.0   0.2
1.5    0.3    4.2   0.1
etc

person Alex Lizz    schedule 15.02.2015    source источник


Ответы (3)


Используя ggplot2, это легко. У вас есть полный контроль над длиной всех четырех «сторон» полос ошибок. С помощью geom_errorbar() вы устанавливаете y-ошибки, а geom_errobarh() (h означает горизонталь) вы устанавливаете x-ошибки.

#toy data
df <- data.frame(X = rnorm(4), errX = rnorm(4)*0.1, Y = rnorm(4), errY = rnorm(4)*0.2)

#load ggplot2
require(ggplot2)

#make graph
ggplot(data = df, aes(x = X, y = Y)) + geom_point() + #main graph
    geom_errorbar(aes(ymin = Y-errY, ymax = Y+errY)) + 
    geom_errorbarh(aes(xmin = X-errX, xmax = X+errX))

У вас есть отдельный контроль над цветом каждой полосы, шириной линии и т. д., задав параметры внутри geom_errorbar(). Смотрите справку и Google для деталей. Например, вы можете контролировать ширину «шапки» или полностью исключить их с помощью параметра width. Сравните график выше с этим для примера их удаления:

ggplot(data = df, aes(x = X, y = Y)) + geom_point() + 
        geom_errorbar(aes(ymin = Y-errY, ymax = Y+errY), width = 0) + 
        geom_errorbarh(aes(xmin = X-errX, xmax = X+errX), height = 0)
person Curt F.    schedule 15.02.2015
comment
Сделал несколько правок, чтобы исправить опечатки в моем первоначальном описании. В частности, geom_errorbarh управляет длиной шапки с помощью параметра height, аналогичного width для geom_errobar. - person Curt F.; 15.02.2015
comment
Любая идея о том, как заглавные буквы могут быть удалены только на одной стороне панели ошибок? - person AJMA; 27.05.2017

В качестве альтернативы (используя «df» Курта Ф.):

rangeX = range(c(df$X + df$errX, df$X - df$errX))
rangeY = range(c(df$Y + df$errY, df$Y - df$errY))

plot(df$X, df$Y, xlim = rangeX, ylim = rangeY)

segments(df$X, df$Y - df$errY, df$X, df$Y + df$errY)
segments(df$X - df$errX, df$Y, df$X + df$errX, df$Y)
person alexis_laz    schedule 15.02.2015

Используя error.crosses из моего пакета psych + игрушечные данные от Курта:

 df1 <- data.frame(mean=df$X,sd=df$errX)
 df2 <- data.frame(mean=df$Y,sd=df$errY) 
 error.crosses(df1,df2,sd=TRUE)

См. страницу справки для error.crosses для более сложных примеров.

person William Revelle    schedule 16.02.2015