Normalizzazione dell’asse y negli istogrammi in R ggplot in proporzione

Ho una domanda molto semplice che mi fa sbattere la testa contro il muro.

Vorrei ridimensionare l’asse y del mio istogramma in modo da riflettere la proporzione (da 0 a 1) che ogni bin compone, invece di avere l’area delle barre sumta a 1, poiché usando y = .. density .. fa, o avere la barra più alta essere 1, come y = .. ncount .. fa.

Il mio input è un elenco di nomi e valori, formattati in questo modo:

name value A 0.0000354 B 0.00768 C 0.00309 D 0.000123 

Uno dei miei tentativi falliti:

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

Questo mi dà un istogramma con area 1, ma altezze di 2000 e 1000:

provare

e y = .. ncount .. mi dà un istogramma con la barra più alta 1.0 e resto ridimensionato ad esso:

provare

ma vorrei che la prima barra avesse un’altezza di 0,5 e le altre due 0,25.

R non riconosce neanche questi usi di scale_y_continuous.

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

Grazie per tutto l’aiuto.

Si noti che ..ncount.. ridimensiona ad un massimo di 1,0, mentre ..count.. è il conteggio del contenitore non scalato.

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

Che dà:

inserisci la descrizione dell'immagine qui

A partire da ggplot2 0.9, molte delle funzioni di formattazione sono state spostate nel pacchetto scale, incluso 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()) 

A partire dalla versione 3.0.0 di ggplot2 più recente e migliore, il formato è cambiato. Ora puoi avvolgere il valore y in stat() piuttosto che scherzare con .. roba.

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