geom_text - ggplot title center
Anotar valores por encima de las barras(ggplot facetado) (1)
Uno de mis trucos favoritos en los gráficos base es una recogida de Bill Dunlap. Ser capaz de colocar valores numéricos (o cualquier valor) por encima de las barras en un gráfico de barras (no lo uso sino de vez en cuando, pero me encanta).
mtcars2 <- mtcars[order(-mtcars$mpg), ]
par(cex.lab=1, cex.axis=.6,
mar=c(6.5, 3, 2, 2) + 0.1, xpd=NA) #shrink axis text and increas bot. mar.
barX <- barplot(mtcars2$mpg,xlab="Cars", main="MPG of Cars",
ylab="", names=rownames(mtcars2), mgp=c(5,1,0),
ylim=c(0, 35), las=2, col=mtcars2$cyl)
mtext(side=2, text="MPG", cex=1, padj=-2.5)
text(cex=.5, x=barX, y=mtcars2$mpg+par("cxy")[2]/2, mtcars2$hp, xpd=TRUE)
Lo que te da:
Quiero poder hacer el mismo tipo de anotación con diagramas de barras facetadas en ggplot. Obviamente, los valores también tendrían que ser por las mismas dos variables que facetas para trazar, para que pueda obtenerlas con ftable. Me gustaría tomar los resultados de la tabla a continuación (para valores distintos de cero) y colocarlos sobre sus barras respectivas.
library(ggplot2)
mtcars2 <- data.frame(id=1:nrow(mtcars), mtcars[, c(2, 8:11)])
mtcars2[, -1] <- lapply(mtcars2[, -1], as.factor)
with(mtcars2, ftable(cyl, gear, am))
ggplot(mtcars2, aes(x=cyl)) + geom_bar() +
facet_grid(gear~am)
Esto me parece bastante difícil, pero tal vez será más fácil de lo que creo. Gracias de antemano por pensar en este problema.
¿Estoy en lo cierto al pensar que solo quieres el conteo (es decir, la altura) de cada barra que no sea cero? Si es así, puedes lograr eso con
ggplot(mtcars2, aes(x=cyl)) +
geom_bar() +
facet_grid(gear~am) +
stat_bin(geom="text", aes(label=..count.., vjust=-1))
Lo cual produce este gráfico (es posible que tengas que hacer algunos ajustes para que aparezca la etiqueta más alta):
count
es una nueva variable en un marco de datos creado por stat_bin (), por lo que debe hacer referencia a él con ..count..