varias - ggplot2-gráfico de barras con apilar y esquivar
superponer graficas en r ggplot (3)
Estoy tratando de crear una gráfica de barras usando ggplot2
donde estoy apilando una variable y esquivando 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 gráfica de barras donde x=treatment
, y=total
, la variable apilada es de type
y la variable esquivada es el year
. Por supuesto que puedo hacer una o la otra:
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 facetado en lugar de esquivar:
ggplot(df, aes(x = year, y = total, fill = type)) +
geom_bar(position = "stack", stat = "identity") +
facet_wrap( ~ treatment)
Con el cambio sugerido por Tyler:
Lo más cercano que puede obtener es dibujando un borde alrededor de las barras dodged
para resaltar los valores de type
apilados.
ggplot(df, aes(treatment, total, fill = year)) +
geom_bar(stat="identity", position="dodge", color="black")
Puede utilizar la interaction(year, treatment)
como la variable del eje x como alternativa a 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).