Cómo añadir unidades a los ejes en ggplot

Tras haber visto cómo modificar los ejes en ggplot o cómo cambiar el estilo de las etiquetas de los ejes en ggplot, hoy descubriremos cómo añadir unidades en los ejes en ggplot.

Principalmente, existen dos maneras de añadir unidades en un gráfico de ggplot. Una, utilizando directamente las funciones del paquete base, “pegando” la unidad en sí. Otra, a través de la librería scales. Con esta librería podremos añadir formatos estándar habituales como son los porcentajes, notación matemática, bytes, símbolo de moneda, entre otros.

La última opción es más recomendada, ya que aunque depende de una librería externa, es “más limpia”. Veamos en detalle cada una de ellas.

Añadiendo manualmente la unidad

Esta vez, generamos 100 datos aleatorios y los representamos sobre un gráfico de líneas.

library(ggplot2)

df <- data.frame(x=1:100, y=abs(rnorm(100)*1000))

ggplot(df, aes(x,y)) +
  geom_line() +
  theme_minimal() -> p
p

Imaginemos que el eje y se refiere a cantidad de dólares y queremos añadir el símbolo del dólar a cada una de las etiquetas del eje. Crear una función que “pegue” el correspondiente símbolo sería la solución: function(x) paste0('$', x)

Añadir símbolo del dólar

p + scale_y_continuous(label = function(x) paste0('$', x))

Añadir el símbolo del porcentaje

La misma técnica se aplicaría si trabajamos con porcentajes.

p + scale_y_continuous(label = function(x) paste0(x,'%'))

Añadir prefijos del Sistema Internacional

Ahora bien. Si por ejemplo, queremos abreviar las etiquetas siguiendo el Sistema Internacional de prefijos, debemos dividir entre 1000 y añadir el sufijo k.

p + scale_y_continuous(label = function(x) paste0(x/1000,'K'))

Sin embargo, necesitamos nosotros manualmente redondear la unidad. Con la siguiente solución veremos que este punto nos lo podemos ahorrar.

Utilizando la librería scales

Ya hemos utilizado la librería scales en otras ocasiones. Por ejemplo para añadir expresiones en la leyenda del gráfico. En esta ocasión, la utilizaremos para indicar las unidades al eje y.

Añadir símbolo del dólar

library(scales)
p + scale_y_continuous(labels = scales::label_dollar())

Para los euros, deberemos crear una función específica.

euro <- label_dollar(
  prefix = "",
  suffix = "\u20ac",
  big.mark = ".",
  decimal.mark = ","
)

p + scale_y_continuous(labels = euro)

Añadir el símbolo del porcentaje

p + scale_y_continuous(labels = label_percent(scale=1))

Nótese que el valor queda multiplicado por 100 si no se indica scale=1.

Añadir prefijos del Sistema Internacional

p + scale_y_continuous(labels = label_number_si())
## Warning: `label_number_si()` was deprecated in scales 1.2.0.
## Please use the `scale_cut` argument of `label_number()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.

Otras posibilidades son, si se trata de gramos, label_number_si('g'), o bien, de metros, label_number_si('m').

En resumen…

  • Añadir símbolo del dólar scale_y_continuous(label = function(x) paste0('$', x)) o bien scale_y_continuous(labels = scales::label_dollar())
  • Añadir el símbolo del porcentaje scale_y_continuous(label = function(x) paste0(x,'%')) o bien scale_y_continuous(labels = label_percent(scale=1))
  • Añadir prefijos del Sistema Internacional scale_y_continuous(labels = label_number_si())
Paula L. Casado
Paula L. Casado
Data Scientist

Científica de datos especializada en visualización de datos.

Relacionado