Visualizar con ggplot2

En este apartado aprenderemos a visualizar los datos con ggplot2. Podéis ver un primer taste de sus posibilidades en ggplot extension gallery. El paquete de gráficos ggplot2 sigue una estructura de capas para desplegar los datos en un gráfico:

  1. Marco de datos
  2. Estéticos
  3. Geometría
  4. Otros

Para empezar tendremos que cargar los siguientes paquetes:

#recordad que los paquetes tienen que estar previamente instalados
library(gapminder)
library(dplyr)
library(ggplot2)

Marco de datos

La primera capa simplemente el marco de datos. Podemos introducir previamente transformaciones con funciones de dplyr antes de llamar a la función ggplot().

gapminder %>% #capa 1: marco de datos
  filter(country == "Germany") %>% #transformación previa con dplyr
  ggplot(aes(x = year, y = lifeExp)) + #capa 2: estéticos
  geom_line() #capa 3: geometría

Estéticos

La segunda capa son los estéticos, que llamaremos dentro de la función ggplot() con la función aes( ). Cada estético es una variable representada en el gráfico. Normalmente introduciremos los dos ejes cartesianos X e Y y otros estéticos como el color. En el siguiente gráfico hay cuatro variables representadas:

  • El eje de las X representa el PIB per cápita.
  • El eje de las Y representa la esperanza de vida.
  • El color de la geometría representa un continente diferente.
  • El tamaño de la geometría representa la población.
gapminder %>% #capa 1: marco de datos
 ggplot(aes(x = gdpPercap, y = lifeExp, color = continent, size = pop)) + #capa 2: con 4 estéticos
 geom_point() #capa 3: geometría

Geometría

La geometría es la forma en que las variables estarán representadas en el gráfico. Hay varias, por ejemplo:

  • Puntos: geom_point()
  • Líneas: geom_line() o geom_smooth()
  • Columnas: geom_bar() o geom_col()
  • Todas las geometrías empiezan por geom_. Hay varias decenas.

Dentro de la función de la geometría indicaremos sus atributos: de qué color la queremos, qué forma, qué nivel de transparencia, etc.

gapminder %>% #capa 1: marc de dades
 ggplot(aes(x = gdpPercap, y = lifeExp, fill = continent)) + #capa 2: con 3 estéticos
 geom_point(color = "blue", #capa 3: geometría con 4 atributos
            size = 1.5, 
            shape = 22, 
            alpha = 0.5) 

Podemos incluir varias geometrías en un mismo gráfico. En el siguiente ejemplo combinamos un diagrama de dispersión y una línea:

  • Además, queremos que el color de los puntos varíen en función del continente. Cuando un aspecto de la geometría varía en función de una variable, es un estético. Indicaremos dentro de la función geom_point(), también con aes(), que el color varíe según el continente.
  • En cambio, no queremos que la transparencia (alpha) varíe en función de ninguna variable. Queremos que todos los puntos tengan la misma transparencia. En este caso, alpha es un atributo de la geometria y estará fuera de la transparencia.
  • Finalmente, introducimos una línea suavizada geom_smooth(). Esta línea comparte dos estéticos con geom_point(): el eje de las X y el eje de las Y. Pero en cambio, no queremos representar una línea para cada continente. Es por eso que no hemos incluido col = continent a la capa 2, sino que la incluimos dentro degeom_point() para que sea sólo un estético de esta geometría pero no de las otras que queramos representar.
gapminder %>%
 ggplot(aes(x = log(gdpPercap), y = lifeExp)) +
 geom_point(aes(col = continent), alpha = 0.4) +
 geom_smooth(col = "dodgerblue4")

Otras capas

La capa facet nos crea varios gráficos en función de una o dos variables categóricas.

gapminder %>%
 ggplot(aes(x = gdpPercap, y = lifeExp)) +
 geom_point(aes(col = continent), alpha = 0.5, show.legend = FALSE) +
 geom_smooth(col = "firebrick4") +
 facet_wrap(. ~ continent, scales = "free")

gapminder %>%
 filter(year %in% c(1997, 2002)) %>%
 ggplot(aes(x = gdpPercap, y = lifeExp)) +
 geom_point(aes(col = continent), alpha = 0.4, show.legend = FALSE) +
 geom_smooth(col = "firebrick4") +
 facet_grid(year ~ continent)

Las escalas indicamos cómo los datos se visualizarán a través de los diferentes estéticos. Podemos poner los títulos de eje, los límites del gráfico, etc.

gapminder %>%
  ggplot(aes(x = gdpPercap, y = lifeExp)) +
  geom_point(aes(col = continent), alpha = 0.4) +
  geom_smooth(col = "firebrick4", se = FALSE) +
  scale_x_continuous(name = "PIB por cápita",
                     expand = c(0,0)) +
  scale_y_continuous(name = "Esperanza de vida",
                     limits = c(20, 80),
                     breaks = c(20, 40, 60, 80),
                     label = c("Jóvenes", "Adultos",
                               "Mayores", "Viejos")) +
  ggtitle("PIB por cápita y esperanza de vida")

Normalmente siempre utilizaremos coordenadas cartesianas, pero también podemos utilizar la capa de coordenadas para convertir el gráfico a otros tipos de coordenadas, como las polares.

gapminder %>%
  filter(year == 2002) %>%
  group_by(continent) %>%
  summarize(population = sum(pop, rm.na = TRUE)) %>%
  ggplot(aes(x = 1, y = population, fill = continent)) +
  geom_col() +
  coord_polar(theta = "y")

En la capa tema es donde podemos dar cuenta nuestro gráfico. Aquí podemos cambiar el color de fondo, el tipo de letra de cada elemento, el tamaño de las letras o cualquier otro elemento del gráfico.

  • Por defecto, R siempre mostrará theme_gray().
  • Puede cambiarlo si añade un nueva capa a la función ggplot(), por ejemplo, theme_classic(), theme_bw(), o theme_dark().
  • También puedemos personalizar hasta el último detalle vuestro gráfico con la función theme(). En este enlace tenéis un resumen.
  • En el siguiente ejemplo hemos utilizado theme_minimal().
gapminder %>%
  filter(country != "Kuwait", 
         year %in% c(1962, 1977, 1987, 2002)) %>% 
  ggplot(aes(x = gdpPercap, y = lifeExp, col = continent, size = pop)) + 
  geom_point() +
  scale_x_log10() +
  facet_wrap(~ year) +
  labs(x = "PIB por cápita", y = "Esperanza de vida", col = "Continente", size = "Població") +
  ggtitle("Evolución del PIB por cápita i l'esperanza de vida (1962-2002)") + 
  theme_minimal()

Podéis descargar nuevos temas como el que utilizan The Economist o The Wall Street Journal mediante el paquete ggthemes cargando el paquete library(ggthemes) .

Más información

Muy importante para dominar ggplot2:

  • Ayudaros del Cheat Sheet de ggplot2.
  • Utilizad la página web del paquete y pulsad en cada una de las funciones para obtener más información de su uso.
  • Ayudaros de otros manuales. Uno de muy interesante es del de R Para Ciencia de Datos (Grolemund and Wickham 2020).
  • En este enlace podéis acceder a varios vídeos para conocer más a fondo ggplot2.

Font: Datacamp

Grolemund, Garrett, and Hadley Wickham. 2020. R para Ciencia de Datos. O’Reilly. https://es.r4ds.hadley.nz/index.html.

Previous