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: Distribución variable numérica.
- Diagrama de líneas: Variable numérica en el tiempo.
- Diagrama de barras: Variable categórica / suma de variable numérica segons categórica.
- Diagrama de cajas: Distribución variable numérica según variable categórica
- Diagrama de dispersión: Does numèricas.
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 congeom_histogram(bins = 20)
visualizaremos 20 intervalos. - También podéis realizar el mismo procedimiento con el argumento
binwidth
, por ejemplo congeom_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 ejemplogeom_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:
- 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()
- 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()