Hasta ahora hemos visto dos paquetes, dplyr y tidyr las cuales son muy similares en su uso y permiten integrar diversas funciones en el mismo flujo de trabajo.
Esta filosofía impusó el desarrollo de Tidyverse, el cual es un conjunto de paquetes que interactuan entre ellos permitiendo un flujo de trabajo eficiente.
Para usar Tidyverse, simplemente installa el paquete y al cargar la libreria, se cargaran todos los paquetes necesarios, entre ellos:
*Reader permite abrir datos de manera analoga a read.table() o read.csv() pero abre los datos directamente como tibbles. La forma de usarlos es:
read_table()read_csv()read_delim()fuera de eso, la sintaxis es igual al de las funciones base de R.
Nota: El paquete readxl no forma parte formalmente de tidyverse, pero se une al flujo de trabajo.
ggplot2 es un paquete, parte de Tidyverse para crear gráficos estáticos. Se basa en el principio de Grammar of graphics de Leland Wilkinson (1999) en el cual, los gráficos se deconstruyen en cada uno de sus componentes:
Data: ggplot espera como entrada un conjunto de datos limpio (tidy). Podemos usar un conjunto de datos distintos para capas distintas.Aesthetics: La escala en al cual se ubicaran los datos.Geometries: Elemento gráfico al que se van a mapear las variables del conjunto de datos. Pueden ser lineas, puntos, bowplots, etc.Facets: Filas y columnas de sub gráficos.statistics: Modelos y resumenes estaditicos.Coordinates: Por defecto, ggplot aplicará las coordenadas cartesianas al gráfico, pero podemos modificar las escalas, asi como el sistema de coordenadas.Theme: Funciones y argumentos relacionados con aspectos gráficos.Para poder utilizar ggplot2, podemos cargar solamente la libreria ggplot2 o cargar todo el conjunto de paquetes tidyverse el cual incluye herramientas que hemos usado hasta ahora como dplyr, tidyr, readr, tibble y ggplot2.
Para esta parte, usaremos la misma base de datos Tabla_Colecta_estaciones.csv
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 3.6.3
## Warning: package 'tibble' was built under R version 3.6.3
## Warning: package 'purrr' was built under R version 3.6.3
## Warning: package 'dplyr' was built under R version 3.6.3
mediciones <- read_csv("data/Tabla_Colecta_estaciones.csv")
mediciones
## # A tibble: 144 x 8
## Individuo Sitio Estacion Sexo Profundidad Longitud_total Longitud_parcial
## <dbl> <chr> <chr> <chr> <chr> <dbl> <dbl>
## 1 1 Bahi~ Verano H Superficie 30.3 22.4
## 2 2 Bahi~ Verano M Superficie 35.5 26.3
## 3 3 Bahi~ Verano H Superficie 30.4 22.5
## 4 4 Bahi~ Verano H Superficie 24.9 18.4
## 5 5 Bahi~ Verano M Superficie 31.8 23.6
## 6 6 Bahi~ Verano H Superficie 29.5 21.9
## 7 7 Bahi~ Verano H Superficie 26.6 19.7
## 8 8 Bahi~ Verano M Superficie 26.2 19.4
## 9 9 Bahi~ Verano H Superficie 29.4 21.7
## 10 10 Bahi~ Verano M Superficie 34.4 25.4
## # ... with 134 more rows, and 1 more variable: anchura <dbl>
ggplot()ggplot(data = mediciones)
Esta funcion no da error, pero no vemos ninguna gráfica. Esto se debe a que no hemos indicado a
ggplot que es lo que tiene que hacer con los datos.
ggplot(data = mediciones, aes(x = Sitio, y = Longitud_total))
Lo primero que debes hacer es decirle a la función ggplot qué conjunto de datos (o dataset) debe utilizar. Esto se hace escribiendo ggplot(df), donde df es un dataframe que contiene todas las características necesarias para hacer la trama. A diferencia de los gráficos de base, ggplot no toma los vectores como argumentos. Este es el primer paso.
El argumento aes() es sinónimo de estética, ggplot2 considera que el eje X e Y de la gráfica es estético, junto con el color, el tamaño, la forma, el relleno, etc. Se puede agregar cualquier estética que se desee dentro del argumento aes(), como por ejemplo indicar los ejes X e Y, especificando las variables respectivas del conjunto de datos. La variable en función de la cual el color, tamaño, forma y trazo debe cambiar también se puede especificar aquí mismo. Debes tener en cuenta que la estética especificada aquí será heredada por todas las capas geom que se agregarán posteriormente
En este caso, además de indicar el conjunto de datos con el que vamos a trabajar dentro de la función Aesthetics (aes()), mapeamos las variables sitio y Longitud_total (posicionados en los ejes x y y respectivamente).
Sin embargo, aún no vemos ninguna gráfica, ya que para esto es necesario indicar que tipo de geometria (geom()) de gráfica queremos utilizar.
ggplot(data = mediciones, aes(x = Sitio, y = Longitud_total))+
geom_point()
Observa que una vez que definimos el aesthetics, podemos cambiar la geometria para dibujar distintos tipos de gráfico, como por ejemplo un box plot
ggplot(data = mediciones, aes(x = Sitio, y = Longitud_total))+
geom_boxplot()
o graficos de disperción usando longitud parcial en x y longitud total en y.
ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total))+
geom_point()
facet_grid()Con facet_grid()podemos incluir disintos planos para cada grupo de nueestra base de datos
ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total))+
geom_point()+
facet_grid(.~ Sitio)
con interaccion
ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total))+
geom_point()+
facet_grid(Profundidad~ Sitio)
Es posible incluir funciones estadisticas
ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total))+
geom_point()+
facet_grid(Profundidad~ Sitio) +
stat_smooth(method = "lm", se = F, col ="red")
## `geom_smooth()` using formula 'y ~ x'
ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total))+
geom_point()+
facet_grid(Profundidad~ Sitio) +
stat_smooth(method = "lm", se = F, col ="red")+
scale_y_continuous("Longitud total (mm)",
limits = c(0,100))+
scale_x_continuous("Longitud Parcial (mm)", limits = c(0,100))
## `geom_smooth()` using formula 'y ~ x'
Para cambiar los nombres de los ejes, asi como el titulo de la gráfica, se puede utilizar las funciones:
xlab()ylabggtitle()ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total)) +
geom_point()+
xlab("Longitud parcial (mm)") +
ylab("Longitud total (mm)") +
ggtitle("relacion de longitud total y parcial")
o simplemente utilizando la funcion labs()
ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total)) +
geom_point()+
labs(x = "Longitud parcial (mm)",
y = "Longitud total (mm)",
title = "relacion de longitud total y parcial")
Finalmente usamos themes para controlar parametros gráficos independientes de los datos, tales como color de fondo, tamaño y tipo de letra, margenes, leyenda, etc.
Los parametros que se pueden controlar con themes()son abundantes, sin embargo, existen varios themes en ggplot2 que se pueden usar rapidamente para cambiar el formato:
theme_gray()theme_bw()theme_linedraw()theme_light()theme_minimal()theme_classic()ggplot(data = mediciones, aes(x = Longitud_parcial, y = Longitud_total))+
geom_point()+
facet_grid(Profundidad~ Sitio) +
stat_smooth(method = "lm", se = F, col ="red")+
scale_y_continuous("Longitud total (mm)",
limits = c(0,100))+
scale_x_continuous("Longitud Parcial (mm)", limits = c(0,100))+
theme_minimal()
## `geom_smooth()` using formula 'y ~ x'
Una de las ventajas de ggplot, es que podemos asignar una gráfica como objeto y hace cambios subsiguientes. Por ejemplo:
p <- ggplot(mediciones, aes(x = Longitud_parcial, y = Longitud_parcial)) +
geom_point()
p
Para posteriormente editar el grafico
p + facet_grid(.~Sexo)
p + facet_grid(.~Sexo) + theme_classic()
Con la función aes() no solo definimos el plano sino que se pueden definir colores o escalas para cada grupo:
ggplot(mediciones, aes(x = Longitud_total, y = Longitud_parcial, col = Profundidad)) +
geom_line()
Ahora apliquemos diferentes aesthetics para diferenciar sitios y profundidad entre la longitud total y la longitud parcial con geom_point().
ggplot(mediciones, aes(x = Longitud_total, y = Longitud_parcial, col = Sitio, shape = Profundidad)) +
geom_point()
Tambien es posible asignarle diferentes atributos a cada variable con aesthetics y usar facet_grid()
k <- ggplot(mediciones, aes(x = Longitud_total, y = Longitud_parcial, col = Sitio, shape = Profundidad))
k + geom_point()
k + geom_point() + facet_grid(Sitio~ Profundidad)
El control de Aesthetis tambien funciona con otros tipos de graficos, como Boxplots:
k <- ggplot(mediciones, aes(x = Sitio, y = Longitud_parcial, col = Sitio))
k + geom_boxplot()
O histogramas
k <- ggplot(mediciones, aes(x = Longitud_parcial, fill = Sitio))
k + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Ejercicio: Dentro de la carpeta data encontraras el archivo
covid_cumulative_since100.csv. Este contiene el número de casos acumulados a partir del caso No 100 (cu_cases) por país hasta el dia 23/05/2020. Utilizando dplyr y ggplot, haz lo siguiente:
as.Date(date,"%m/%d/%Y")date en el eje x y cu_cases en el eje y tal como se muestra en la imagen:Respuesta:
## Parsed with column specification:
## cols(
## date = col_character(),
## cname = col_character(),
## iso3 = col_character(),
## cases = col_double(),
## deaths = col_double(),
## cu_cases = col_double(),
## cu_deaths = col_double(),
## days_elapsed = col_double()
## )