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

Resuelto hks asked hace 54 años • 0 respuestas

cascada

¿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...

hks avatar Jan 01 '70 08:01 hks
Aceptado

Simplemente agregue un nuevo yvalor para el texto que se base en el signo del yvalor 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))

ingrese la descripción de la imagen aquí

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

r2evans avatar Feb 16 '2024 03:02 r2evans