2012-09-07 23 views
6

Quiero hacer gráficos de barras donde se puede especificar el mínimo de la barra (al igual que la caja en un diagrama de caja y bigote). ¿Puede hacer barplot eso? Sospecho que la respuesta está en ggplot, pero no puedo encontrar un ejemplo. He aquí algunos datos:Gráficos de barras flotantes

    X Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
1  Highest recorded 31.5 31.8 30.3 28.0 24.9 24.4 21.7 20.9 24.5 25.4 26.0 28.7 
2 Mean monthly maximum 27.8 28.6 27.0 24.8 22.0 20.0 18.9 18.8 20.4 22.4 23.9 26.8 
3 Mean daily maximum 24.2 24.8 23.1 20.9 18.4 16.3 15.5 15.7 16.9 18.3 20.0 22.4 
4     Mean 19.1 19.8 18.1 16.2 13.8 11.9 11.2 11.6 12.7 14.1 15.7 17.7 
5 Mean daily minimum 14.0 14.7 13.1 11.4 9.2 7.5 6.9 7.4 8.4 10.0 11.4 13.0 
6 Mean monthly minimum 7.6 9.1 6.8 3.8 2.3 -0.5 -0.2 1.0 2.3 3.7 5.3 6.7 
7  Lowest recorded 4.0 5.6 4.1 -1.3 0.0 -3.1 -2.6 -1.4 -0.8 2.0 2.7 4.1 

eje x = c ("J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D")

Entonces, idealmente, termino con una barra apilada para cada mes, que comienza en el valor 'Menor registrado', en lugar de en cero .

También he intentado con superbarplot del paquete UsingR. Puedo hacer que las barras empiecen donde yo quiero, pero no puedo mover el eje x hacia abajo desde el centro de la trama. Gracias por adelantado.

+0

+1 A veces también deseo una geom_floatingbar. –

+1

Consulte esta pregunta para obtener inspiración: http://stackoverflow.com/questions/12306469/ggplot2-size-and-placement-of-geom-line –

Respuesta

6

Puede utilizar geom_boxplot en ggplot2 para conseguir lo que (creo) que desea especificar los valores precalculados y stat = 'identity' y utilizar geom_crossbar a poner en el otro

# first, your data 
weather <- read.table(text = 'X Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
1  "Highest recorded" 31.5 31.8 30.3 28.0 24.9 24.4 21.7 20.9 24.5 25.4 26.0 28.7 
2 "Mean monthly maximum" 27.8 28.6 27.0 24.8 22.0 20.0 18.9 18.8 20.4 22.4 23.9 26.8 
3 "Mean daily maximum" 24.2 24.8 23.1 20.9 18.4 16.3 15.5 15.7 16.9 18.3 20.0 22.4 
4     "Mean" 19.1 19.8 18.1 16.2 13.8 11.9 11.2 11.6 12.7 14.1 15.7 17.7 
5 "Mean daily minimum" 14.0 14.7 13.1 11.4 9.2 7.5 6.9 7.4 8.4 10.0 11.4 13.0 
6 "Mean monthly minimum" 7.6 9.1 6.8 3.8 2.3 -0.5 -0.2 1.0 2.3 3.7 5.3 6.7 
7  "Lowest recorded" 4.0 5.6 4.1 -1.3 0.0 -3.1 -2.6 -1.4 -0.8 2.0 2.7 4.1', header =T) 


library(reshape2) 
library(ggplot2) 
# reshape to wide format (basically transposing the data.frame) 
w <- dcast(melt(weather), variable~X) 
ggplot(w, aes(x=variable,ymin = `Lowest recorded`, 
     ymax = `Highest recorded`, lower = `Lowest recorded`, 
     upper = `Highest recorded`, middle = `Mean daily maximum`)) + 
    geom_boxplot(stat = 'identity') + 
    xlab('month') + 
    ylab('Temperature') + 
    geom_crossbar(aes(y = `Mean monthly maximum`))+ 
    geom_crossbar(aes(y = `Mean monthly minimum`)) + 
    geom_crossbar(aes(y = `Mean daily maximum`))+ 
    geom_crossbar(aes(y = `Mean daily minimum`)) 

enter image description here

Esto se describe parcialmente en un ejemplo en la ayuda para geom_boxplot

Cuestiones relacionadas