2012-08-01 25 views
31

Tengo una pregunta muy sencilla haciendo que me golpeo la cabeza contra la pared.eje y en los histogramas de R ggplot a proporción

Me gustaría escalar el eje y de mi histograma para reflejar la proporción (0 a 1) que compone cada cubo, en lugar de tener el área de las barras suma a 1, usando y = .. densidad .. does, o teniendo la barra más alta sea 1, como y = .. ncount .. does.

Mi entrada es una lista de nombres y valores, con el formato de este modo:

name value 
A 0.0000354 
B 0.00768 
C 0.00309 
D 0.00

Una de mis intentos fallidos:

library(ggplot2) 
mydataframe < read.delim(mydata) 
ggplot(mydataframe, aes(x = value)) + 
geom_histogram(aes(x=value,y=..density..)) 

Esto me da un histograma con zona 1, pero alturas de 2000 y 1000:

try

ey = .. ncount. . Me da un histograma con la más alta bar 1,0, y descansar reducido a la misma:

try

pero me gustaría tener la primera barra tienen una altura de 0,5, y los otros dos 0.25.

R no reconoce estos usos de scale_y_continuous tampoco.

scale_y_continuous(formatter="percent") 
scale_y_continuous(labels = percent) 
scale_y_continuous(expand=c(1/(nrow(mydataframe)-1),0) 

Gracias por cualquier ayuda.

Respuesta

46

Tenga en cuenta que ..ncount.. vuelve a escalar hasta un máximo de 1.0, mientras que ..count.. es el recuento de contenedores sin escala.

ggplot(mydataframe, aes(x=value)) + 
    geom_histogram(aes(y=..count../sum(..count..))) 

cual da:

enter image description here

+1

Esto es exactamente lo que estaba buscando. Te haces sentir como un idiota, ¡y estoy realmente agradecido por ti! –

+6

No tenía idea de que era posible hacer algo como esto. Gracias a este consejo, puedo generar un histograma de supervivencia/fiabilidad (es decir, 1 CDF) usando 'aes (y = 1-cumsum (.. count ..)/sum (.. count ..))'. – dnlbrky

11

A partir de ggplot2 0,9, muchas de las funciones del formateador se han trasladado al paquete escalas, incluyendo percent_format().

library(ggplot2) 
library(scales) 

mydataframe <- data.frame(name = c("A", "B", "C", "D"), 
          value = c(0.0000354, 0.00768, 0.00309, 0.000123)) 

ggplot(mydataframe) + 
    geom_histogram(aes(x = value, y = ..ncount..)) + 
    scale_y_continuous(labels = percent_format()) 
+0

¡Gracias por la aclaración! Me preguntaba qué pasaba con mi formato ... –

Cuestiones relacionadas