Ajuste automáticamente el texto del eje x justo encima o justo debajo de y=0 dependiendo de si la barra es positiva o negativa
¿Qué línea de código puedo agregar a este gráfico para que las etiquetas del eje x aparezcan justo debajo de la altura y=0 si las barras son positivas y justo encima de y=0 si las barras son negativas?
Tengo otro gráfico que necesito producir que solo tendrá 4 barras (diferentes etiquetas del eje x) y me gustaría que el código funcione para ese también, es decir, que no sea específico para las etiquetas en este gráfico, de modo que puede facetarlos.
Estoy pensando que sería genial si hubiera algo como si y >0 entonces la etiqueta del eje x en y=-1 o la etiqueta del eje x en y=1...
Simplemente agregue un nuevo y
valor para el texto que se base en el signo del y
valor real de la barra.
library(ggplot2)
# original data
data.frame(x=1:5, y=c(20,10,2,-4,-9), lbl=letters[1:5]) |>
# add a new `y` that is based on the sign of the real data
transform(label_y = 2 * -sign(y)) |>
ggplot(aes(x, y)) +
geom_bar(stat = "identity") +
geom_text(aes(y = label_y, label = lbl))
El uso de 2*
depende de tus valores reales, siéntete libre de jugar con eso.
Como alternativa, en caso de que desee que los valores superiores/inferiores sean asimétricos, puede reemplazarlos 2*sign(y)
con ifelse(y < 0, 3, -2)
.