Representaciones gráficas

En esta sección combinaremos funciones de los paquetes dplyr y ggplot2 para representar gráficamente la distribución de una o más variables del marco de datos gapminder.

library(ggplot2)
library(dplyr)
library(gapminder)

Para poder hacer estas representaciones, tendremos que estar suficientemente familiarizados con la gramática de ggplot2, puesto que en las páginas siguientes aplicaremos diversas de las geometrías que ofrece el paquete. Según el tipo de variable que queramos representar utilizaremos las siguientes formas de representación gráfica:

Histograma

Con el histograma visualizamos con barras verticales la distribución de los valores de una variable numérica.

  • En el eje de las x, cada barra representa un intervalo de valores.
  • En el eje de las y, la altura de la barra corresponde al número de casos que se encuentran en cada intervalo.
  • Con R, representaremos esta figura con la función geom_histogram().
gapminder %>%
  filter(year == 1992) %>%
  ggplot(aes(x = gdpPercap)) +
  geom_histogram() +
  theme_bw()

Variantes del histograma:

  • Podéis cambiar el número de intervalos con el argumento bins dentro de la función del histograma, por ejemplo con geom_histogram(bins = 20) visualizaremos 20 intervalos.
  • También podéis realizar el mismo procedimiento con el argumento binwidth, por ejemplo con geom_histogram(binwidth = 3000) indicamos que cada uno de los intervalos nos represente 3.000 dólares per cápita
  • Si en lugar de visualizar el número de frecuencias en el eje vertical preferís visualizar los porcentajes podéis usar geom_histogram(aes(y = ..density..)).
  • Indicaremos el color con el argumento fill, por ejemplo geom_histogram(fill = "dark blue").
  • También podemos usar el color como un estético, indicando llenar las barras según una variable categórica, por ejemplo fill = continent:
gapminder %>%
  ggplot(aes(x = lifeExp, fill = continent)) +
  geom_histogram(position = "stack") +
  theme_classic()

Diagrama de densidad: la alternativa al histograma

El diagrama de densidad es similar al histograma, pero en lugar de columnas nos resume mediante un área la distribución de una variable numérica. Probad los códigos siguientes:

gapminder %>% 
  ggplot(aes(x = lifeExp)) + 
  geom_density(fill = "seagreen2", bw = 1) #color naranja

gapminder %>% 
  ggplot(aes(x = lifeExp, fill = continent)) + #color según continente
  geom_density(alpha = 0.4) #aplicamos transparencia

gapminder %>% 
  filter(year %in% c(1962, 1977, 1992, 2007)) %>%  #usamos solo 4 años
  ggplot(aes(x = lifeExp, fill = factor(year))) + #color según año
  geom_density(alpha = 0.4, bw = 5) #aplicamos transparencia

gapminder %>% filter(year %in% c(1962, 1977, 1992, 2007)) %>% #usamos solo 4 años
  ggplot(aes(x = lifeExp, fill = factor(year))) + #color según año
  geom_density(bw = 5) + 
  facet_wrap(~ year) #creamos facet

Diagrama de líneas

El diagrama de líneas se utiliza normalmente para visualizar la tendencia de una variable numérica en el tiempo.

  • En el eje de las x situaremos la variable temporal (numérica)
  • En el eje de las y situaremos la variable numérica que queremos ver su evolución.
  • Con R, representaremos esta figura geométrica con la función geom_line().

En el código siguiente, resumimos la media de la esperanza de vida mundial agrupada por año y a continuación pedimos un diagrama de líneas con varios atributos (color, tamaño, tipo de línea).

gapminder %>%
  group_by(year) %>%
  summarize(mean_lifeExp = mean(lifeExp)) %>%
  ggplot(aes(x = year, y = mean_lifeExp)) +
  geom_line(col = "dark green", size = 1.2, lty = 5)

En el siguiente gráfico hemos filtrado el marco de datos por cinco paises y añadido un color para cada línea en los estéticos.

gapminder %>%
  filter(country %in% c("Cambodia", "Germany", "China", "Angola", "Rwanda")) %>%
  ggplot(aes(x = year, y = lifeExp, col = country)) +
  geom_line(size = 1.2)

Diagrama de barras

El diagrama de barras representa los valores de una variable categórica (a diferencia del histograma, que como ya sabemos representa los valores de una variable numérica). Hay dos maneras de representar un diagrama de barras:

  1. Si queremos saber cuantas observaciones hay en cada categoría de una variable categórica:
  • En el eje de las x indicaremos una variable categórica.
  • No tenemos que indicar nada en el eje de las y. La altura de las barras representará el número de frecuencias de cada categoría de la variable categórica que hemos indicado en el eje horizontal.
  • En este caso, utilizaremos geom_bar().
ggplot(gapminder, aes(x = continent)) +
  geom_bar()
  1. Si queremos saber la suma de los valores de una variable numérica por cada categoría de una variable categórica:
  • Indicaremos una variable categórica en el eje de las x.
  • Indicaremos una variable, normalmente numérica, en el eje de las y.
  • En este caso, representaremos el diagrama con la geom_col().
gapminder %>%
  group_by(continent) %>%
  summarize(m_gdpCap = mean(gdpPercap)) %>%
  ggplot(aes(x = continent, y = m_gdpCap, fill = continent)) +
  geom_col(show.legend = FALSE)

Con coord_flip() podemos cambiar las coordenadas. Es un procedimiento útil cuando tenemos un número elevado de categorías en el eje de las x.

gapminder %>%
  filter(year == 2007, country %in% c("Australia", "Botswana", "Namibia", "Jamaica", 
                                      "Peru", "United Kingdom", "Venezuela", "Vietnam")) %>%
  arrange(desc(country)) %>%
  ggplot(aes(x = country, y = gdpPercap, fill = country)) +
  geom_col(show.legend = FALSE) +
  coord_flip()

Otra opción es que las columnas nos representen proporciones en lugar de valores. Lo podemos hacer con el argumento position = "fill". Fijaos en que esta opción nos permite representar tres variables.

  • En el eje horizontal ubicamos la variable año, que hemos pasado a factor para que sea considerada categórica.
  • En el eje vertical ubicamos el PIB per cápita en términos relativos.
  • En el color vemos los países.
gapminder %>%   
  filter(country %in% c("Brazil", "China", "India", "United Kingdom", "United States"),
         year %in% c(1957, 1967, 1977, 1987, 1997, 2007)) %>%
  group_by(year, country) %>%
  summarize(gdp = gdpPercap * pop) %>%
  ggplot(aes(x = factor(year), y = gdp, fill = country)) +
  geom_col(position = "fill") +
  scale_fill_brewer(palette = 3, type = "qual") +
  theme_minimal()

Diagrama de cajas

En el diagrama de cajas observamos cómo una variable numérica está distribuida según los valores de una variable categórica.

  • Indicaremos una variable categórica en el eje de las x.
  • Indicaremos una variable numérica en el eje de las y.
  • En este caso, representaremos el diagrama con la geom_boxplot().
gapminder %>% 
  filter(year == 1992) %>%
  ggplot(aes(x = continent, y = gdpPercap)) +
  geom_boxplot()

En el diagrama de cajas observamos:

  • La mediana de la distribución.
  • El percentil 75.
  • El percentil 25.
  • Los valores extremos.

Diagrama de dispersión

El diagrama de dispersión representa con puntos la relación entre dos variables numéricas.

  • Indicaremos una variable numérica en el eje de las x.
  • Indicaremos una variable numérica en el eje de las y.
  • En este caso, representaremos el diagrama con la geom_point().
gapminder %>% 
  filter(year == 1952,
         gdpPercap < 50000) %>% 
  ggplot(aes(x = gdpPercap, y = lifeExp)) + 
  geom_point()

En algunos gráficos nos puede interesar dispersar los puntos para evitar la sobrerepresentación. Utilizaremos geom_jitter() para tal propósito.

gapminder %>% 
  ggplot(aes(x = year, y = lifeExp, col = continent)) + 
  geom_jitter(width = 1.2, height = 0.1, alpha = 0.5) +
  theme_bw()

Más información

En este enlace podéis acceder a varios vídeos para conocer más a fondo ggplot2.

Font: Datacamp

Next