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“ на Curt F.):

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 от моя психически пакет + данните за играчките от Curt:

 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