2012-10-03 16 views
18

Sto provando a creare un barplot usando ggplot2 dove sto impilando da una variabile e schivando da un'altra.ggplot2 - trama bar con stack e dodge

Ecco un set di dati di esempio:

df=data.frame(
    year=rep(c("2010","2011"),each=4), 
    treatment=rep(c("Impact","Control")), 
    type=rep(c("Phylum1","Phylum2"),each=2), 
    total=sample(1:100,8)) 

desidero creare un barplot dove x=treatment, y=total, la variabile impilati è type e la variabile schivato è year. Certo che posso fare uno o l'altro:

ggplot(df,aes(y=total,x=treatment,fill=type))+geom_bar(position="dodge",stat="identity") 

ggplot(df,aes(y=total,x=treatment,fill=year))+geom_bar(position="dodge",stat="identity") 

ma non entrambi! Grazie a tutti coloro che possono dare consigli.

+3

È possibile eseguire solo l'uno o l'altro, non entrambi. Vedere la mia risposta correlata qui: http://stackoverflow.com/questions/12592041/plotting-a-stacked-bar-plot/12592235#12592235 – Maiasaura

risposta

15

Ecco un'alternativa prendere con sfaccettatura invece di schivare:

ggplot(df, aes(x = year, y = total, fill = type)) + 
    geom_bar(position = "stack", stat = "identity") + 
    facet_wrap(~ treatment) 

enter image description here

Con il cambiamento suggerito di Tyler:

enter image description here

+1

Buona alternativa a voler entrambi. +1 – Maiasaura

+0

Hmm, idea interessante. Immagino che dovrà fare! Grazie a @Maiasaura e Matt Parker – jslefche

+7

aggiungendo '+ tema (panel.margin = unità (-1.25," linee "))' può farli sembrare più come se fossero nello stesso campo visivo ma non esattamente quello che l'OP era dopo. Bella migliore alternativa. +1 –

6

Il più vicino è possibile disegnando un bordo attorno alle barre dodged per evidenziare i valori impilati type.

ggplot(df, aes(treatment, total, fill = year)) + 
geom_bar(stat="identity", position="dodge", color="black") 

enter image description here

+1

Hmm, i bordi non sembrano allineare con i dati. Ad esempio, 'set.seed (8)' prima di eseguire il codice e osservare i valori. – jslefche

+1

Se volevi davvero essere fantasioso, scommetto che potresti usare 'geom_rect' per riempire alcune parti, ma poi stai usando ggplot per disegnare piuttosto che la trama. –

Problemi correlati