Tidyverse es una colección de paquetes de R de código abierto especialiados en la importación, ordenamiento, modificación y visualización de datos. Sus estructuras son muy similares, de forma que existe coherencia e integración entre ellos, optimizando así la aplicación de sus funciones en la ciencia de datos. Estos paquetes y sus funciones son los mostrados a continuación:
Librería | Descripción |
---|---|
ggplot2 | Biblioteca para visualización de datos, basada en la gramática de los gráficos. Permite crear gráficos atractivos y personalizados. |
dplyr | Proporciona herramientas para manipulación y transformación eficiente de datos, incluyendo filtrado, selección de columnas, ordenamiento y agregación. |
tidyr | Librería para la manipulación de datos tabulares, permitiendo reorganizar, separar o combinar columnas y filas. Es especialmente útil para convertir datos en formato “wide” a “long” y viceversa. |
readr | Ofrece funciones para leer y escribir datos en diferentes formatos, como CSV, TSV y archivos de ancho fijo. Proporciona una forma rápida y eficiente de importar y exportar datos en R. |
existen más librerias, sin embargo para alcanzar el objetivo de este cursillo vamos a profindizar en ggplot2
Al llamar la librería Tidyverse, estamos llamando la librería de ggplot2 que es la que se va a usar en esta parte del cursillo
library(ggplot2)
La librería ggplot2 permite hacer un gran número de graficos con mucho mejor calidad que los graficos que tienen r por defecto, vamos a trabajar la siguiente base de datos
tail(mpg)
## # A tibble: 6 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 volkswagen passat 1.8 1999 4 auto(l5) f 18 29 p mids…
## 2 volkswagen passat 2 2008 4 auto(s6) f 19 28 p mids…
## 3 volkswagen passat 2 2008 4 manual(m6) f 21 29 p mids…
## 4 volkswagen passat 2.8 1999 6 auto(l5) f 16 26 p mids…
## 5 volkswagen passat 2.8 1999 6 manual(m5) f 18 26 p mids…
## 6 volkswagen passat 3.6 2008 6 auto(s6) f 17 26 p mids…
Tienes que utilizar print(). Puedes averiguar cómo usarlo escribiendo el comando ?print en la consola.
Utiliza el argumento n =
Puede usar ? para pedirle ayuda a r, y saber cual es el argumento n de la función
print(mpg, n = 20)
## # A tibble: 234 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto… f 18 29 p comp…
## 2 audi a4 1.8 1999 4 manu… f 21 29 p comp…
## 3 audi a4 2 2008 4 manu… f 20 31 p comp…
## 4 audi a4 2 2008 4 auto… f 21 30 p comp…
## 5 audi a4 2.8 1999 6 auto… f 16 26 p comp…
## 6 audi a4 2.8 1999 6 manu… f 18 26 p comp…
## 7 audi a4 3.1 2008 6 auto… f 18 27 p comp…
## 8 audi a4 quattro 1.8 1999 4 manu… 4 18 26 p comp…
## 9 audi a4 quattro 1.8 1999 4 auto… 4 16 25 p comp…
## 10 audi a4 quattro 2 2008 4 manu… 4 20 28 p comp…
## 11 audi a4 quattro 2 2008 4 auto… 4 19 27 p comp…
## 12 audi a4 quattro 2.8 1999 6 auto… 4 15 25 p comp…
## 13 audi a4 quattro 2.8 1999 6 manu… 4 17 25 p comp…
## 14 audi a4 quattro 3.1 2008 6 auto… 4 17 25 p comp…
## 15 audi a4 quattro 3.1 2008 6 manu… 4 15 25 p comp…
## 16 audi a6 quattro 2.8 1999 6 auto… 4 15 24 p mids…
## 17 audi a6 quattro 3.1 2008 6 auto… 4 17 25 p mids…
## 18 audi a6 quattro 4.2 2008 8 auto… 4 16 23 p mids…
## 19 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 20 chevrolet c1500 sub… 5.3 2008 8 auto… r 11 15 e suv
## # … with 214 more rows
Otra solución válida es:
mpg[1:20,]
## # A tibble: 20 × 11
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto… f 18 29 p comp…
## 2 audi a4 1.8 1999 4 manu… f 21 29 p comp…
## 3 audi a4 2 2008 4 manu… f 20 31 p comp…
## 4 audi a4 2 2008 4 auto… f 21 30 p comp…
## 5 audi a4 2.8 1999 6 auto… f 16 26 p comp…
## 6 audi a4 2.8 1999 6 manu… f 18 26 p comp…
## 7 audi a4 3.1 2008 6 auto… f 18 27 p comp…
## 8 audi a4 quattro 1.8 1999 4 manu… 4 18 26 p comp…
## 9 audi a4 quattro 1.8 1999 4 auto… 4 16 25 p comp…
## 10 audi a4 quattro 2 2008 4 manu… 4 20 28 p comp…
## 11 audi a4 quattro 2 2008 4 auto… 4 19 27 p comp…
## 12 audi a4 quattro 2.8 1999 6 auto… 4 15 25 p comp…
## 13 audi a4 quattro 2.8 1999 6 manu… 4 17 25 p comp…
## 14 audi a4 quattro 3.1 2008 6 auto… 4 17 25 p comp…
## 15 audi a4 quattro 3.1 2008 6 manu… 4 15 25 p comp…
## 16 audi a6 quattro 2.8 1999 6 auto… 4 15 24 p mids…
## 17 audi a6 quattro 3.1 2008 6 auto… 4 17 25 p mids…
## 18 audi a6 quattro 4.2 2008 8 auto… 4 16 23 p mids…
## 19 chevrolet c1500 sub… 5.3 2008 8 auto… r 14 20 r suv
## 20 chevrolet c1500 sub… 5.3 2008 8 auto… r 11 15 e suv
Se puede notar que el método de la solución no es único
es una biblioteca de visualización de datos en R que utiliza la gramática de gráficos para crear visualizaciones atractivas y personalizadas. Con ggplot2, puedes crear gráficos de alta calidad utilizando una combinación de capas estéticas y geométricas.
El enfoque principal de ggplot2 es permitirte construir gráficos de forma iterativa, agregando capas de información una a una. Cada capa representa una componente específica del gráfico, como puntos, líneas, barras o áreas. Puedes personalizar cada capa mediante una amplia gama de opciones estéticas, como colores, tamaños y formas.
Además de las capas geométricas, ggplot2 también permite agregar capas estadísticas, que representan resúmenes de los datos subyacentes, como medias, medianas o intervalos de confianza. Estas capas estadísticas proporcionan una forma conveniente de resumir y visualizar tendencias o patrones en los datos.
El proceso de construcción de un gráfico con ggplot2 sigue un flujo coherente. Primero, especificas el conjunto de datos que deseas visualizar y mapeas variables a estéticas, como colores o tamaños. Luego, añades capas geométricas y estadísticas para representar visualmente los datos. Puedes personalizar aún más el gráfico ajustando los ejes, agregando leyendas y anotaciones, cambiando los temas visuales, entre otras opciones.
Una de las fortalezas de ggplot2 es su flexibilidad y capacidad para crear gráficos altamente personalizados. Puedes ajustar cada aspecto del gráfico utilizando una amplia variedad de funciones y opciones. Además, ggplot2 está diseñado para funcionar bien con la filosofía del “tidy data” y se integra sin problemas con otras librerías del tidyverse, como dplyr y tidyr, lo que facilita la manipulación y visualización de datos en un flujo de trabajo coherente.
En resumen, ggplot2 enriquece la visualización de datos en R al proporcionar una forma estructurada y poderosa de crear gráficos personalizados utilizando la gramática de los gráficos. Con su enfoque iterativo y su amplia gama de opciones de personalización, ggplot2 es una herramienta invaluable para explorar y comunicar patrones y tendencias en tus datos.
La sintaxis de ggplot2 tiene tres aspectos a considerar: data, mapping y geometría
#ggplot(data = <DATOS>) +
# <FUNCIÓN_GEOM>(mapping = aes(<VARIABLES>))
Geometría | Descripción |
---|---|
geom_point |
Puntos individuales en el gráfico. |
geom_line |
Líneas que conectan los puntos en orden. |
geom_path |
Líneas que conectan los puntos en el orden en que aparecen en los datos. |
geom_bar |
Barras verticales o horizontales. |
geom_histogram |
Histogramas que cuentan la frecuencia de los valores en un rango. |
geom_boxplot |
Diagramas de caja y bigotes para resumir la distribución de los datos. |
geom_area |
Áreas sombreadas bajo una línea o entre dos líneas. |
geom_density |
Gráfico de densidad que muestra la distribución de los datos. |
geom_tile |
Cuadrados o rectángulos de igual tamaño para representar valores en una matriz. |
geom_polygon |
Polígonos definidos por una secuencia de coordenadas. |
geom_text |
Etiquetas de texto colocadas en ubicaciones específicas en el gráfico. |
geom_label |
Etiquetas de texto con una caja de fondo. |
geom_ribbon |
Bandas sombreadas entre dos líneas. |
geom_errorbar |
Barras de error que representan la incertidumbre en los datos. |
geom_smooth |
Curva suavizada que muestra una tendencia en los datos. |
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
# Prueba a hacer lo mismo, pero representando el gasto en carretera
vs. el gasto en ciudad. ¿Qué observas?
ggplot(data = mpg) +
geom_point(mapping = aes(x = hwy, y = cty))
El comando aes(), además de para introducir las variables principales (x e y), sirve para introducir otras variables y modificar de qué forma se van a ver en la gráfica. Ilustrándonos con el ejemplo anterior, podemos ver cómo la gráfica nos muestra la relación que existe entre el consumo de un determinado vehículo y su cilindrada. Si quisiéramos observar la relación que tienen estos resultados con la variable class (el tipo de coche), podemos introducirla dentro del comando aes() como propiedad visual.
Representamos la clase de coche dentro de la gráfica anterior cambiando el color de los puntos empleando el argumento color:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class))
Note que con este simple gráfico se pueden ver como interaccionan tres variables
Podemos mapear cualquier variable dentro del gráfico incluyéndola en aes(). Además, podemos elegir que propiedad visual asignar a esta (color, tamaño de los puntos…). Podemos representar el tipo de vehículos cambiando el tamaño de los puntos (con size):
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, size = class))
## Warning: Using size for a discrete variable is not advised.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, alpha = class))
## Warning: Using alpha for a discrete variable is not advised.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, shape = class))
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 7. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 62 rows containing missing values (geom_point).
Estos ejemplos, sin embargo, muestran una serie de problemas. En los dos primeros se dificulta la visión de algunos puntos, mientras que en el tercero ggplot2 únicamente representa seis formas de puntos, que son fácilmente diferenciables entre sí. Cuando el número de valores es mayor a seis, se dejan de representar algunas de estos.
Estos aesthetics, por tanto, solo se emplean en casos muy específicos.
Puedes diseñar otras gráficas empleando diferentes aesthetics. Prueba a mirar todos los aesthetics posibles para el diagrama de dispersión usando ?geom_point.
Una cosa muy importante para tener en cuenta es que aes() solo sirve para modificar las gráficas con respecto a una variable. También podemos modificarla sin tener en cuenta los valores. Por ejemplo, podemos cambiar el color de todos los puntos sacando color del comando aes():
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy), color = "blue")
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = cty))
# Sobre la gráfica del ejercicio anterior, cambia la forma de los puntos
por cuadrados (shape = 15) y representa el tipo de combustible según el
color.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = cty, color = fl), shape = 15)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = cty, color = displ < 5))
Son gráficos estadísticos aquellos que representan datos cuantitativos. Entre ellos encontramos los gráficos de dispersión (repasados en el apartado anterior), diagramas de barras, diagramas de cajas, histogramas, etc. Para estudiar estos gráficos vamos a usar un nuevo conjunto de datos denominado “diamonds”, incluido en ggplot2, que contiene información sobre diferentes propiedades de un gran número de diamantes.
Empecemos estudiando los gráficos de barras empleando el comando geom_bar(), de la misma forma que con los gráficos de dispersión.
Imaginemos que queremos clasificar los diamantes según la calidad del corte (variable cut). Para ello, usamos:
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut))
ggplot2 interpreta automáticamente que, al no concretar la variable y, debe representar el número total de diamantes por calidad de corte. Para ello, ggplot2 emplea unas transformaciones estadísticas capaces de crear nuevas variables modificando las ya existentes. En este caso, lo que hace es contar el número de diamantes dentro de cada tipo de corte.
Al igual que el resto de gráficas, empleando aes() puedes modificar la apariencia del gráfico de barras. En los gráficos de barras, color cambia el color del borde de las barras y fill cambia el color del relleno.
Por ejemplo, podemos representar la claridad de los diamantes (variable clarity) de la siguiente forma:
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity))
También podemos representar diagramas de cajas, empleando la función geom_box. Como ejemplo, podemos representar el gasto en carretera según el tipo de coche de la siguiente manera:
ggplot(data = mpg) +
geom_boxplot(mapping = aes(x = class, y = hwy))
Si necesitamos girar la gráfica, simplemente añadimos coord_flip() justo a continuación:
ggplot(data = mpg) +
geom_boxplot(mapping = aes(x = class, y = hwy)) +
coord_flip()
# Gráficas múltiples A veces, para facilitar la visualización de los
datos, es necesario representar varias gráficas a la vez. Para ello,
existen dos formas:
Supongamos que necesitamos representar una línea de tendencia del gasto en carretera con respecto a la cilindrada. Usando geom_smooth() dibujamos una línea de tendencia suavizada del conjunto de datos propuesto:
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Si quisiéramos representar esta línea como una capa sobre un diagrama de dispersión, simplemente escribimos sus respectivas funciones geom una después de la otra:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, color = class)) +
geom_smooth(mapping = aes(x = displ, y = hwy))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Podemos combinar tantas capas como queramos, siempre y cuando no existan incoherencias entre las variables representadas.
Supongamos que queremos representar el gasto en carretera con respecto a la cilindrada. Imaginemos también que queremos representar los tipos de vehículos. Podemos hacer como hicimos antes, es decir, representar los tipos de vehículos según el color. Esto, sin embargo, a veces puede resultar en gráficas difíciles de observar, pues es complicado distinguir los diferentes valores.
Para solucionar esto podemos usar los facets, con los que es posible representar muchas gráficas a la vez dividiendo las variables en numerosos paneles. Para ello, usamos facet_wrap(). Se usa de la siguiente forma:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl)
Los facets son muy útiles cuando queremos tener una visión global de todas las posibles representaciones que podemos hacer para luego seleccionar la que más nos interese.
Con el material visto hasta ahora, estamos bastante preparados para representar datos ordenados de forma lógica y agradable. Existen muchísimas más opciones para graficar empleando ggplot2, aunque en este tutorial únicamente hemos mostrado lo que nos parece esencial. Si quieres saber más, puedes revisar el resto de posibilidades aquí).
SELECCIONE UNO PARA EXPONER SU AVANCE EN EL CURSILLO
Con la base de datos ‘iris’ que tiene por defecto R, realizar:
Gráfico de caja y bigotes de la variable Sepal.Length
Gráfico de caja y bigotes de la variable Sepal.Length diferenciando por color la variable Species
Gráfico de puntos de la variable Sepal.Length vs Sepal.Width
Gráfico de puntos de la variable Sepal.Length vs Sepal.Width diferenciando por color
En cada gráfico haga una breve interpretación
Con la base de datos ‘economics’ que tiene por defecto R, realizar:
Gráfico de caja y bigotes de la variable taza de ahorro
Realizar un histograma de la variable taza de ahorro
Gráfico de puntos de la variable taza de ahorro vs población estimada
En cada gráfico haga una breve interpretación