2012-04-01 2 views
5

Mam tabelę ze średnimi i międzykwartylowymi zakresami. Chciałbym stworzyć dotplot, w którym kropka wskazywałaby tę średnią, a pasek rozciągałby się przez kropkę, aby pokazać odległość międzykwartylową. Innymi słowy, kropka znajdowałaby się w środkowej części taktu, którego długość byłaby równa moim danym międzykwartylowym. Pracuję w R.dodanie danych rozsiewu do kropek w R

Na przykład

labels<-c('a','b','c','d') 
averages<-c(10,40,20,30) 
ranges<-c(5,8,4,10) 
dotchart(averages,labels=labels) 

gdzie zakresy zostaną następnie dodane do tej działki jako barów.

Wszelkie pomysły?

Dzięki!

Odpowiedz

8

Jeszcze inny sposób, wykorzystując bazę.

labels <- c('a', 'b', 'c', 'd') 
averages <- c(10, 40, 20, 30) 
ranges <- c(5, 8, 4, 10) 
dotchart(averages, labels=labels, xlab='average', pch=20, 
     xlim=c(min(averages-ranges), max(averages+ranges))) 
segments(averages-ranges, 1:4, averages+ranges, 1:4) 

dotchart with error bars

4

ggplot2 ma dobry instrument umożliwiający w ten sposób:

library(ggplot2) 

labels<-c('a','b','c','d') 
averages<-c(10,40,20,30) 
ranges<-c(5,8,4,10) 

x <- data.frame(labels,averages,ranges) 

ggplot(x, aes(averages,labels)) + 
geom_point() + 
geom_errorbarh(aes(xmin=averages-ranges,xmax=averages+ranges)) 

daje działkę jak:

Dot plot with ranges

+1

fantastyczne! i aby upewnić się, że rozumiem, ostatnia linia powinna być (zakresy/2) za każdym razem, aby uzyskać połowę zakresu po każdej stronie średniej, prawda? – Pascal

+0

Zależy od tego, w jaki sposób zdefiniowano zakresy, ale jeśli reprezentują rzeczywisty zakres (różnica między minimami i maksimami) niż tak. Jeśli są to standardowe wartości błędów, to w jaki sposób potraktowałem je powyżej, jest to, czego potrzebujesz. –

7

Dla przypomnienia, oto kratownica rozwiązanie, które wykorzystuje parę funkcji z pakietu Hmisc:

library(lattice) 
library(Hmisc) 

labels<-c('a','b','c','d') 
averages<-c(10,40,20,30) 
ranges<-c(5,8,4,10) 
low <- averages - ranges/2 
high <- averages + ranges/2 
d <- data.frame(labels, averages, low, high) 

Dotplot(labels ~ Cbind(averages, low, high), data = d, 
     col = 1,          # for black points 
     par.settings = list(plot.line = list(col = 1)), # for black bars 
     xlab = "Value") 

enter image description here