2012-04-01 12 views
5

Tengo una tabla con promedios y rangos intercuartílicos. Me gustaría crear una gráfica de puntos, donde el punto mostraría este promedio, y una barra se extendería a través del punto, para mostrar el rango intercuartílico. En otras palabras, el punto estaría en el punto medio de una barra, cuya longitud sería igual a mis datos de rango intercuartílico. Estoy trabajando en R.agregando datos de propagación a gráficos de puntos en R

Por ejemplo,

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

donde los rangos luego se añaden a esta trama como bares.

¿Alguna idea?

Gracias!

Respuesta

8

Sin embargo, otro método, utilizando 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 tiene una buena facilidad para hacer esto:

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

le da una trama como:

Dot plot with ranges

+1

fantástico! y solo para asegurarme de que entiendo, la última línea debe ser (rangos/2) cada vez, para obtener la mitad del rango en cada lado de la media, ¿correcto? – Pascal

+0

Depende de cómo haya definido los rangos, pero si representan un rango real (la diferencia entre mínimos y máximos) que sí. Si son cifras de error estándar, entonces es como lo que he tratado anteriormente. –

7

Para el registro, he aquí una solución celosía, que utiliza un par de funciones del paquete 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

Cuestiones relacionadas