2012-02-27 11 views
5

Rysuję dotplot() przy użyciu lattice lub Dotplot() przy użyciu Hmisc. Kiedy używać domyślnych parametrów, mogę wykreślić słupki błędów bez małych końcówek pionowychRysowanie pionowego zakończenia linii paska błędów w dotplot

O-

ale chciałbym dostać

| - o-- |

wiem, że mogę dostać

| O- |

kiedy używam centipede.plot() z plotrix lub segplot() od latticeExtra, ale te rozwiązania nie dają mi takie ładne opcje klimatyzacji jak Dotplot(). Starałem się grać z par.settings z plot.line, który działa dobrze na zmianę Error Line bar kolor, szerokość, itd, ale do tej pory byłem przegrała dodanie pionowych zakończeń:

require(Hmisc) 
mean = c(1:5) 
lo = mean-0.2 
up = mean+0.2 
d = data.frame (name = c("a","b","c","d","e"), mean, lo, up) 
Dotplot(name ~ Cbind(mean,lo,up),data=d,ylab="",xlab="",col=1,cex=1, 
     par.settings = list(plot.line=list(col=1), 
         layout.heights=list(bottom.padding=20,top.padding=20))) 

enter image description here

Proszę, nie dostarczaj mi rozwiązań, które używają ggplot2 ...

+0

Punktem wyjścia może być użycie 'bwplot' i modyfikować panel, to znaczy' panel.bwplot'. – Andrie

+0

Poniższe wątki mogą być pomocne. http://r.789695.n4.nabble.com/dotplots-with-error-bars-td4382474.html http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2791.html –

Odpowiedz

6

W przeszłości miałem taką samą potrzebę z barchart() zamiast z Dotplot().

Moje rozwiązanie polegało wówczas na utworzeniu spersonalizowanej funkcji panelu, która: (1) najpierw wykonuje oryginalną funkcję panelu; i (2) następnie używa panel.arrows(), aby dodać pasek błędów (za pomocą strzałki z dwoma głowicami, w której krawędzie głowicy tworzą kąt 90 stopni z wałem).

Oto, co to może wyglądać z Dotplot():

# Create the customized panel function 
mypanel.Dotplot <- function(x, y, ...) { 
    panel.Dotplot(x,y,...) 
     tips <- attr(x, "other") 
     panel.arrows(x0 = tips[,1], y0 = y, 
        x1 = tips[,2], y1 = y, 
        length = 0.15, unit = "native", 
        angle = 90, code = 3) 
} 

# Use almost the same call as before, replacing the default panel function 
# with your customized function. 
Dotplot(name ~ Cbind(mean,lo,up),data=d,ylab="",xlab="",col=1,cex=1, 
     panel = mypanel.Dotplot, 
     par.settings = list(plot.line=list(col=1), 
         layout.heights=list(bottom.padding=20,top.padding=20))) 

enter image description here

+0

Niezły! Pomyślałem, że te funkcje panelu mogą wykonywać magię, ale podręcznik kratownicy nie jest prosty i istnieje wiele podejść, które można zastosować w celu zmiany parametrów. Zdrowie przyjacielu! –

+0

Hmm teraz mam z tym problem, ponieważ nie działa, gdy stosuję dwa dodatkowe warunki. Zobacz, dodając kolejny warunek: 'Dotplot (name ~ Cbind (mean, lo, up) | condX * condY, ...)'. Jakieś pomysły? –

+0

@GeekOnAcid - Nie mam teraz czasu. Sugerowałbym, abyś wstawił wiersz 'browser()' wewnątrz dostosowanej funkcji panelu (zrobiłaby to pierwsza linia). Następnie, gdy/jeśli ta funkcja panelu zostanie wywołana, przerwie wykonywanie i możesz tam zaglądać, aby sprawdzić, czy na przykład 'tips <- attr (x," other ")' nadal pobiera poprawne dane . (Jeśli używasz 'groups =' zamiast warunkowania (przez '|'), powiedziałbym, że będziesz musiał zająć się całym 'panelem.superpose() 'bagno, ale ja * wierzę *, że to chyba nie jest problem tutaj. –