2012-04-01 11 views
5

Ho una tabella con medie e intervalli interquartili. Mi piacerebbe creare un dotplot, dove il punto mostrerebbe questa media, e una barra si estenderebbe attraverso il punto, per mostrare l'intervallo interquartile. In altre parole, il punto si troverebbe nel punto medio di una barra, la cui lunghezza equivarrebbe ai miei dati dell'intervallo interquartile. Sto lavorando in R.aggiungendo dati di spread a dotplots in R

Per esempio,

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

in cui gli intervalli sarebbe poi essere aggiunti a questa trama come bar.

Qualche idea?

Grazie!

risposta

8

Ancora un altro metodo, utilizzando base.

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 ha una buona struttura per fare questo:

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

ti dà una trama simile:

Dot plot with ranges

+1

fantastico! e solo per essere sicuro di capire, l'ultima riga dovrebbe essere (intervalli/2) ogni volta, per ottenere metà dell'intervallo su ciascun lato della media, corretto? – Pascal

+0

Dipende da come sono stati definiti gli intervalli, ma se rappresentano un intervallo reale (la differenza tra minima e massima) rispetto a sì. Se sono cifre di errore standard, di come li ho trattati sopra è quello che ti serve. –

7

Per la cronaca, ecco un reticolo soluzione , che utilizza una coppia delle funzioni del pacchetto 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