2012-09-02 9 views
13

Sto provando a creare un barattolo sfaccettato, con percentuali che aggiungono fino a 100 per ogni sfaccettatura. La soluzione a questo sembra essere una combinazione di group e ..density... Come mai - mi sembra che group sia in conflitto con fill.Percentuali di somma per ogni facet - rispetto "riempimento"

dati:

test <- data.frame(
    test1 = sample(letters[1:2], 100, replace = TRUE), 
    test2 = sample(letters[3:8], 100, replace = TRUE) 
) 

Questo ottiene le percentuali giuste:

ggplot(test, aes(test2)) + 
    geom_bar(aes(y = ..density.., fill=test2,group=test1)) + 
    facet_grid(~test1) 

autobus, come si può vedere, fill viene sovrascritta: percentage sums to 100 for each facet

Tuttavia, il codice qui sotto aspetti fill ma mi dà le percentuali sbagliate (somme a 100 per l'intero grafico) (usando ..densità ..):

ggplot(test, aes(test2)) + 
    geom_bar(aes(y = ..count../sum(..count..), fill=test2)) + 
    facet_grid(~test1) 

percentage sums to 100 for the total chart

correlati: Questa vecchia mia domanda: percentage on y lab in a faceted ggplot barchart?.

E sì, potrei creare dati aggiuntivi, ma credo che questo appartenga al livello di presentazione. In realtà questo sembra un insetto?

risposta

13

Questo è un po 'un trucco, ma è possibile fare riferimento allo ..x.. all'interno della chiamata geom_bar. L'unico problema è che ggplot considera questo numeric e così mi hanno costretto a fattore e dato belle etichette all'interno di una chiamata a scale_fill_brewer

ggplot(test, aes(x= test2, group = test1)) + 
    geom_bar(aes(y = ..density.., fill = factor(..x..))) + 
    facet_grid(~test1) + 
    scale_fill_brewer(name = 'test2', breaks = 1:6, 
        labels = levels(test$test2), palette = 'Set3') 

enter image description here

confrontare con non costringere ..x.. ad un fattore

ggplot(test, aes(x= test2, group = test1)) + 
    geom_bar(aes(y = ..density.., fill = ..x..)) + 
    facet_grid(~test1) 

enter image description here

+0

Adoro quel set3 pallete! – duhaime

+0

@mnel, stavo cercando di generare un grafico a barre simile in Shiny con position = "dodge", ottenendo comunque tutte le barre al 100%. Sarebbe bello se tu potessi suggerire dove sto andando male. Grazie e scusa per esserti messo in contatto in questo modo. Ho postato la domanda su http://stackoverflow.com/questions/41078480/r-shiny-ggplot-bar-and-line-charts-with-dynamic-variable-selection-and-y-axis-to – user1412

Problemi correlati