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:
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()
ogeom_smooth()
- Columnas:
geom_bar()
ogeom_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 conaes()
, 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 congeom_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 incluidocol = 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()
, otheme_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.