Come è possibile tracciare le proporzioni relative di due gruppi utilizzando un riempimento estetico in ggplot2?Come posso tracciare le proporzioni relative di due gruppi usando un riempimento estetico in ggplot2?
Chiedo a questa domanda qui perché diverse altre risposte su questo argomento sembrano non corretta (ex1, ex2, e ex3), ma Croce Validated sembra avere domande specifiche funzionalmente vietato R (CV meta). ..density..
è concettualmente correlato a, ma distinto dalle proporzioni (ex4 e ex5). Quindi la risposta corretta non sembra implicare la densità.
Esempio:
set.seed(1200)
test <- data.frame(
test1 = factor(sample(letters[1:2], 100, replace = TRUE,prob=c(.25,.75)),ordered=TRUE,levels=letters[1:2]),
test2 = factor(sample(letters[3:8], 100, replace = TRUE),ordered=TRUE,levels=letters[3:8])
)
ggplot(test, aes(test2)) + geom_bar(aes(y = ..density.., group=test1, fill=test1) ,position="dodge")
#For example, the plotted data shows level a x c as being slightly in excess of .15, but a manual calculation shows a value of .138
counts <- with(test,table(test1,test2))
counts/matrix(rowSums(counts),nrow=2,ncol=6)
La risposta che sembra produrre un output che è correct località di una soluzione che non utilizza ggplot2 (calcolando fuori di ggplot2) oppure richiede che un pannello utilizzare anziché un riempimento estetico.
Modifica: L'inserimento in stat_bin produce che la funzione alla fine chiamata è bin, ma bin ottiene solo i valori in x aes. Senza riscrivere stat_bin (o eseguendo un'altra stat_) l'hack applicato nella risposta referenziata sopra può essere generalizzato al fill aes in assenza del gruppo aes con il seguente codice per le azioni: y = ..count../sapply(fill, FUN=function(x) sum(count[fill == x]))
. Questo sostituisce semplicemente PANEL (la colonna nascosta che è presente alla fine di StatBin) con riempimento). Presumibilmente altre variabili nascoste potrebbero ottenere lo stesso trattamento.
Come funziona questo generalizzare i casi in cui ho, diciamo, una trama divisa in gruppi e poi sfaccettato in pannelli? – RoyalTS
@RoyalTS: Credo che lo stesso problema si applichi perché il problema è che non c'è (o almeno non c'era) una funzione stat_ appropriata in ggplot2. Ho scritto una bozza di soluzione che funziona come un drop-in con ggplot2 ... ma non sono sicuro di quanto sia solido, quindi non l'ho postato. – russellpierce