2010-03-30 15 views
8

ho i seguenti dati semplicicome definire i colori di riempimento nell'istogramma ggplot?

data <- structure(list(status = c(9, 5, 9, 10, 11, 10, 8, 6, 6, 7, 10, 
10, 7, 11, 11, 7, NA, 9, 11, 9, 10, 8, 9, 10, 7, 11, 9, 10, 9, 
9, 8, 9, 11, 9, 11, 7, 8, 6, 11, 10, 9, 11, 11, 10, 11, 10, 9, 
11, 7, 8, 8, 9, 4, 11, 11, 8, 7, 7, 11, 11, 11, 6, 7, 11, 6, 
10, 10, 9, 10, 10, 8, 8, 10, 4, 8, 5, 8, 7), statusgruppe = c(0, 
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, NA, 0, 1, 0, 1, 
0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 
1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 
1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0)), .Names = c("status", 
"statusgruppe"), class = "data.frame", row.names = c(NA, -78L 
)) 

da che mi piacerebbe fare un istogramma:

ggplot(data, aes(status))+ 
geom_histogram(aes(y=..density..), 
    binwidth=1, colour = "black", 
    fill="white")+ 
theme_bw()+ 
scale_x_continuous("Staus", breaks=c(min(data$status,na.rm=T), median(data$status, na.rm=T), max(data$status, na.rm=T)),labels=c("Low", "Middle", "High"))+ 
scale_y_continuous("Percent", formatter="percent") 

Ora - mi piacerebbe che i bidoni di prendere colou in base al valore - ad esempio i contenitori con valore> 9 diventano grigio scuro - tutto il resto dovrebbe essere grigio chiaro.

Ho provato con fill=statusgruppe, scale_fill_grey(breaks=9) ecc., Ma non riesco a farlo funzionare. Qualche idea?

risposta

11

Speriamo che questo dovrebbe iniziare:

ggplot(data, aes(status, fill = ..x..))+ 
    geom_histogram(binwidth = 1) + 
    scale_fill_gradient(low = "black", high = "white") 

ggplot(data, aes(status, fill = ..x.. > 9))+ 
    geom_histogram(binwidth = 1) + 
    scale_fill_grey() 
+1

Grazie - Ho cambiato il legendlabel in questo modo (per i posteri) scale_fill_grey ("Nome", interruzioni = c (FALSE, VERO), etichette = c ("Questo", "Quello")). Un'altra domanda però: - è possibile fare qualcosa come ..x ..> 7, ..x ..> 9 (Se voglio tre categorie invece di solo due?) – Andreas

+1

In tal caso, usa 'cut' . – hadley

+2

Grazie! - se qualcun altro è interessato, ecco come l'ho fatto: fill = cut (.. x .., c (1,6,10))), binwidth = 1, color = "black", ) + scale_fill_grey ( "nome", breaks = c ("(1,6]", "(6,10]", NA), labels = c ("Low", "Midle", "High")) + – Andreas

0

Che ne dici di utilizzare fill=..count.. o fill=I(..count..>9) subito dopo y=..density..? Devi armeggiare con il titolo della leggenda e le etichette un po ', ma ottiene il colore giusto.

MODIFICA:
Sembra che abbia frainteso la tua domanda un po '. Se si desidera definire il colore in base alla coordinata x, è possibile utilizzare la variabile automatica ..x.. in modo simile.

+0

Grazie per le buone idee! comunque - il conteggio non è quello che sto cercando di mostrare. Vorrei che il colore del bin-bar dipendesse dal valore rappresentato da quel bin (non dal conteggio). cioè non con più di 9 conteggi, ma con valori superiori a 9. Non credo di essere bravo a spiegare questo: -/ Forse sono le mie etichette sugli assi che mi confondono. Quello che mi piacerebbe è colorare i contenitori a destra dell'etichetta "middle" – Andreas

0

Che dire di scale_manual? Ecco il link sul sito di Hadley. Ho usato questa funzione per impostare un colore di riempimento appropriato per un boxplot. Non sono sicuro se funzionerà con istogramma, anche se ...

Problemi correlati