Genera gráficos de barras astackdas emparejadas en ggplot (usando position_dodge solo en algunas variables)

Espero usar ggplot2 para generar un conjunto de barras astackdas en pares, muy parecido a esto:

ejemplo de barras apiladas

Con los siguientes datos de ejemplo:

 df <- expand.grid(name = c("oak","birch","cedar"), sample = c("one","two"), type = c("sapling","adult","dead")) df$count <- sample(5:200, size = nrow(df), replace = T) 

Me gustaría que el eje x representara el nombre del árbol, con dos barras por especie de árbol: una barra para la muestra uno y una barra para la muestra dos. Entonces los colores de cada barra deberían estar determinados por tipo.

El siguiente código genera la barra astackda con colores por tipo:

 ggplot(df, aes(x = name, y = count, fill = type)) + geom_bar(stat = "identity") 

enter image description here

Y el siguiente código genera las barras esquivadas por muestra:

 ggplot(df, aes(x = name, y = count, group = sample)) + geom_bar(stat = "identity", position = "dodge") 

enter image description here

Pero no puedo evitar esquivar uno de los grupos (muestra) y astackr el otro agrupamiento (tipo):

 ggplot(df, aes(x = name, y = count, fill = type, group = sample)) + geom_bar(stat = "identity", position = "dodge") 

enter image description here

Una solución sería poner la interacción de la sample y el name en el eje x y luego ajustar las tags para el eje x. El problema es que las barras no se ponen cerca la una de la otra.

 ggplot(df, aes(x = as.numeric(interaction(sample,name)), y = count, fill = type)) + geom_bar(stat = "identity",color="white") + scale_x_continuous(breaks=c(1.5,3.5,5.5),labels=c("oak","birch","cedar")) 

enter image description here

Otra solución es usar facetas para name y sample como valores de x.

 ggplot(df,aes(x=sample,y=count,fill=type))+ geom_bar(stat = "identity",color="white")+ facet_wrap(~name,nrow=1) 

enter image description here

    Intereting Posts