Geometrías

En esta sección veremos las geometrías más importantes disponibles en ggplot para visualizar un conjunto de datos. Estas geometrías se pueden combinar entre sí y añadir diferentes stats sobre las mismas. Esto permite una variedad de posibilidades muy interesante a la hora de visualizar datos. Este tipo de casos más concretos, se tratarán en el blog de manera individualizada. En esta guía nos centraremos en conocer las geometrías esenciales. Empezamos!

Cómo hacer un gráfico de dispersión o scatter plot en ggplot

En primer lugar, cargamos una librería de datos llamada palmerpenguins que contiene diversas métricas de los pingüinos de las islas del archipiélago Palmer de la Antártida.Si no tienes instalada esta librería lo puedes hacer a través de install.packages("palmerpenguins") .

data(penguins, package = "palmerpenguins")

A continuación, utilizaremos la función geom_point() para representar un el gráfico de dispersión o también conocido como scatter plot.

Nota

Fíjate que tanto el título principal del gráfico como el de los ejes se modifican siguiendo lo aprendido en las secciones anteriores título.

Por otro lado, fijamos el tema antes de empezar con la función theme_set(). Si no te acuerdas cómo fijar un tema puedes volver a leer la sección sobre cómo personalizar un tema en ggplot.

library(ggplot2)

theme_set(theme_elartedeldato())

Ahora ya estamos listos para realizar el gráfico de dispersión. Para ello, utilizamos la función geom_point().

ggplot(penguins, aes(bill_length_mm, bill_depth_mm, color = species)) +
  geom_point() +
  labs(
    title = "Gráfico de dispersión",
    subtitle = "Longitud frente a profundidad del pico de pingüinos del archipiélago Palmer según especie",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo hacer un gráfico de barras con ggplot2

Para hacer un gráfico de barras en ggplot utilizamos la función geom_bar(). Por defecto, esta función cuenta automáticamente el número de eventos de cada categoría de x indicada en la estética dentro de la función aes(), en este caso la variable species.

Nota

Es posible evitar esta característica de la función geom_bar() a através del argumento stat = "identity".

Tip

Puedes modificar el color de relleno de las barras con el argumento fill = color.

ggplot(penguins, aes(species)) +
  geom_bar(fill = "#feaa44") +
  labs(
    title = "Gráfico de barras",
    subtitle = "Número de pingüinos por especie del archipiélago Palmer",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo girar un gráfico de barras

Para girar el gráfico de barras simplemente cambiamos el argumento de entrada en la estética, es decir:

ggplot(penguins, aes(y = species)) +
  geom_bar(fill = "#feaa44") +
  labs(
    title = "Gráfico de barras",
    subtitle = "Número de pingüinos por especie del archipiélago Palmer",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo hacer un gráfico de columnas con ggplot2

El gráfico de columnas con ggplot se puede hacer a través de la función geom_col(). El mecanismo es similar al de geometrías anteriores.

penguins |>
  dplyr::group_by(species) |>
  dplyr::count() -> df

ggplot(df, aes(species, n)) +
  geom_col(fill = "#feaa44") +
  labs(
    title = "Gráfico de columnas",
    subtitle = "Número de pingüinos por especie del archipiélago Palmer",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Nota

Nota que el resultado de esta función es exactamente el mismo que el de geom_bar(stat = "identity")

Cómo hacer un boxplot con ggplot2

El boxplot es un gráfico de resume una variable a través de sus cuartiles. Para hacer un boxplot en R con ggplot, necesitaremos un dataset con una variable categórica y otra numérica a resumir y aplicaremos

Nota

¿Qué pasa si no dispongo de una variable categórica? No pasa nada, puedes indicar x = "" o x = 1, por ejemplo, y se representará el boxplot sobre un valor del eje. Otra opción es indicar directamente la variable numérica y funcionará igual.

ggplot(penguins, aes(species, bill_length_mm, color = species)) +
  geom_boxplot() +
  labs(
    title = "Boxplot",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por especies",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Nota

¿Y si quiero representar el boxplot tumbado o sobre el eje y? Simplemente indica aes(x = ...) y ggplot interpretará que pretendes mostrar el boxplot girado.

Cómo hacer un histograma con ggplot2

Dentro de los gráficos de distribución se encuentra el histograma. En ggplot, lo puedes utilizar con geom_histogram() indicando dentro de la función aes() la variable principal.

Nota

Para hacer un histograma por grupos utiliza el argumento fill = .... también puedes utilizar el argumento color, pero el resultado es menos legible.

ggplot(penguins, aes(bill_length_mm, fill = species)) +
  geom_histogram() +
  labs(
    title = "Histograma",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por species",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo modificar el número y ancho de barraen un histograma de ggplot

Para modificar el número de barras de un gráfico de ggplot utilizamos el argumento bins. Para modificar su ancho, binwidth. Obviamente no se pueden modificar ambos a la vez, y en caso de hacerlo, ggplot atenderá al ancho de barra.

ggplot(penguins, aes(bill_length_mm, fill = species)) +
  geom_histogram(bins = 10) +
  labs(
    title = "Histograma",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por species",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo hacer un gráfico de densidad con ggplot2

Al igual que el histograma, el gráfico de densidad nos permite representar una distribución de una variable. La función que utilizamos en ggplot es geom_density(). El funcionamiento es similar al de geom_histogram().

ggplot(penguins, aes(bill_length_mm, fill = species)) +
  geom_density() +
  labs(
    title = "Gráfico de densidad",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por species",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo cambiar el estilo de un gráfico de densidad

Podemos modificar ligeramente el gráfico anterior para mostrar mejor cada una de las densidades. Para ello añadimos el argumento alpha = 0.5 a geom_density() o bien dentro de aes(). Además, cambiamos el color de la línea de las densidades con el argumento color = ....

ggplot(penguins, aes(bill_length_mm, fill = species, color = species)) +
  geom_density(alpha = 0.5) +
  labs(
    title = "Gráfico de densidad",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por species",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo hacer un gráfico de densidad en 2D con ggplot2

ggplot(penguins, aes(bill_length_mm, bill_depth_mm, color = species)) +
  geom_density2d() +
  labs(
    title = "Gráfico de densidad en 2D",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por species",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Nota

Fíjate en como vamos utilizando los argumentos color o fill según el tipo de geometría. No todas permiten ambas, pero en todas podremos jugar con alguna de ellas.

Cómo hacer un gráfico de violín con ggplot2

ggplot(penguins, aes(species, bill_depth_mm, color = species, fill = species)) +
  geom_violin() +
  labs(
    title = "Gráfico de violín",
    subtitle = "Distribución de longitud del pico de pingüinos del archipiélago Palmer por species",
    caption = "Fuente: librería palmerpenguins. elartedeldato.com"
  )

Cómo hacer un gráfico de líneas con ggplot2

Para los siguientes ejemplos, utilizaremos los datos del dataset storms de dplyr para visualizar el número de tormentas entre 1975 y 2020 registradas en la base de datos de huracanes atlánticos de la NOAA.

Para hacer un gráfico de línea necesitaremos dos variables numéricas que indicaremos en la función aes() e indicar la geometría adecuada, en este caso, geom_line().

df_storms <- dplyr::storms |>
  dplyr::group_by(año = year) |>
  dplyr::summarize(n = dplyr::n_distinct(name))

ggplot(df_storms, aes(año, n)) +
  geom_line() +
  labs(
    title = "Gráfico de líneas",
    subtitle = "Número de tormentas anual registradas por la NOAA",
    caption = "Fuente: NOAA. elartedeldato.com"
  )

Nota

Para modificar el color de la línea puedes usar el argumento color dentro de geom_line().

Cómo hacer un gráfico de área con ggplot2

Dentro de los gráfico básicos de ggplot se encuentra el gráfico de área. Al igual que el de línea podemos utilizarlo para representar la evolución de un evento en el tiempo.

En ggplot utilizaremos la función geom_area() con el argumento fill si queremos personalizar el color por defecto del área en sí.

ggplot(df_storms, aes(año, n)) +
  geom_area(fill = "#216593") +
  labs(
    title = "Gráfico de área",
    subtitle = "Número de tormentas anual registradas por la NOAA",
    caption = "Fuente: NOAA. elartedeldato.com"
  )

En resumen…
  • geom_point() para hacer un gráfico de puntos
  • geom_bar() para hacer un gráfico de barras
  • geom_col() para hacer un gráfico de columnas
  • geom_boxplot() para hacer un boxplot
  • geom_histogram() para hacer un histograma
  • geom_density() para hacer un gráfico de densidad
  • geom_density_2d() para hacer un gráfico de densidad en 2d
  • geom_violin() para hacer un gráfico de violín
  • geom_line() para hacer un gráfico de líneas
  • geom_area() para hacer un gráfico de área