2013-02-25 22 views

Odpowiedz

18

problem roztworem csgillespie, gdy masz logarytmiczną oś X. Będziesz miał różną długość małych pasków po prawej stronie po lewej stronie (epsilon podąża za wartościami x).

Powinieneś lepiej użyć funkcji errbar z pakietu 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") 
) 
19

Możesz użyć segments, aby dodać paski w podstawowej grafice. Tutaj epsilon steruje linią wzdłuż górnej i dolnej linii.

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) 
} 

Jak @thelatemail zwraca uwagę, że powinienem naprawdę używali funkcja zwraca wektoryzowane:

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

24

Rozwiązanie z ggplot2:

qplot(x,y)+geom_errorbar(aes(x=x, ymin=y-sd, ymax=y+sd), width=0.25) 

enter image description here

+0

ustawienie geom_errorbar (szerokość = 0) usuwa czapki z obu końców paska błędów. Masz pomysł, jak to zrobić tylko po jednej stronie paska błędów? Dzięki – AJMA

18

Oprócz odpowiedzi @ csgillespie, w segments również wektoryzowane pomóc w tego typu rzeczy: wydaje

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

+0

Powinienem był zgadnąć - dzięki. – csgillespie

18

Można użyć arrows:

arrows(x,y-sd,x,y+sd, code=3, length=0.02, angle = 90) 
+1

Ta odpowiedź jest lepsza niż odpowiedzi dotyczące 'segmentów'; prostsze i działa, nawet gdy oś X znajduje się na skali logarytmicznej (co spowodowałoby, że rozwiązania wykorzystujące "segmenty" rysowałyby różne długości w lewo i prawo). – bhaller

+0

@SmartCH, w jaki sposób mogę obliczyć kwartokosy przez rząd macierzy, a następnie narysować rozdziały i średnią jak powyżej, proszę? –

Powiązane problemy