Creare un grafico a barre in pila per più variabili – ggplot2 in R

Ho alcuni problemi con la creazione di un grafico a barre in pila in ggplot2. So come crearne uno con barplot (), ma volevo usare ggplot2 perché è molto semplice fare in modo che le barre abbiano la stessa altezza (con ‘position =’ fill ”, se non sbaglio).

Il mio problema è che ho più variabili che voglio tracciare l’una sull’altra; i miei dati assomigliano a questo:

dfr <- data.frame( V1 = c(0.1, 0.2, 0.3), V2 = c(0.2, 0.3, 0.2), V3 = c(0.3, 0.6, 0.5), V4 = c(0.5, 0.1, 0.7), row.names = LETTERS[1:3] ) 

Quello che voglio è un grafico con le categorie A, B e C sull’asse X e, per ognuno di essi, i valori di V1, V2, V3 e V4 impilati uno sopra l’altro sull’asse Y. La maggior parte dei grafici che ho visto tracciano solo una variabile sull’asse Y, ma sono sicuro che uno potrebbe farlo in qualche modo.

Come potrei farlo con ggplot2? Grazie!

Innanzitutto, alcune manipolazioni di dati. Aggiungi la categoria come variabile e sciogli i dati in formato lungo.

 dfr$category <- row.names(dfr) mdfr <- melt(dfr, id.vars = "category") 

Ora trama, usando la variabile denominata variable per determinare il colore di riempimento di ogni barra.

 library(scales) (p <- ggplot(mdfr, aes(category, value, fill = variable)) + geom_bar(position = "fill", stat = "identity") + scale_y_continuous(labels = percent) ) 

(MODIFICA: codice aggiornato per utilizzare i pacchetti di scales , come richiesto dal ggplot2 v0.9.)

inserisci la descrizione dell'immagine qui

Mi scusi per aver iniziato una nuova risposta mentre voglio solo aggiungere un commento sulla bellissima soluzione fornita da @Richie. Non ho i punti minimi per pubblicare un commento, quindi ecco il mio caso:

Il ... + geom_bar(position="fill") ha generato un errore per il mio plotting, sto usando ggplot2 versione 0.9.3.1. e rimodellare2 piuttosto che rimodellare per lo scioglimento.

 error_message: *Mapping a variable to y and also using stat="bin". With stat="bin", it will attempt to set the y value to the count of cases in each group. This can result in unexpected behavior and will not be allowed in a future version of ggplot2. If you want y to represent counts of cases, use stat="bin" and don't map a variable to y. If you want y to represent values in the data, use stat="identity". See ?geom_bar for examples. (Deprecated; last used in version 0.9.2) stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. Error in pmin(y, 0) : object 'y' not found* 

Così l’ho cambiato in geom_bar(stat='identity') e funziona.