ggplot2 – gráfico de barras con stack y dodge

Intento crear una barra de par usando ggplot2 donde estoy astackndo por una variable y esquivando por otra.

Aquí hay un conjunto de datos de ejemplo:

 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)) 

Me gustaría crear una barra de barras donde x=treatment , y=total , la variable astackda es type y la variable esquivada es year . Por supuesto que puedo hacer uno u otro:

 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") 

¡Pero no ambos! Gracias a cualquiera que pueda dar consejos.

Aquí hay una toma alternativa usando facetas en lugar de esquivar:

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

enter image description here

Con el cambio sugerido por Tyler:

enter image description here

Lo más cercano que puede obtener es dibujando un borde alrededor de las barras dodged para resaltar los valores de type astackdos.

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

enter image description here

Puede usar la interaction(year, treatment) como la variable del eje x como una alternativa para dodge .

 library(tidyverse) 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)) %>% mutate(x_label = factor(str_replace(interaction(year, treatment), '\\.', ' / '), ordered=TRUE)) ggplot(df, aes(x=x_label, y=total, fill=type)) + geom_bar(stat='identity') + labs(x='Year / Treatment') 

Creado en 2018-04-26 por el paquete reprex (v0.2.0).