library(here)
library(tidyverse)
library(tidylog)
13/01/2025
https://rstats-courses.github.io/CursoR-AEET-2025/materiales.html
La exploración de datos nos permite verificar su calidad, generar y probar hipótesis de forma rápida, identificando pistas prometedoras para analizar más a fondo luego.
La visualización de los datos es un buen comienzo, pero por sí sola no suele ser suficiente, ya que a menudo requiere transformar los datos previamente.
ggplot
Reproducible
Consistencia gramática
Muy flexible y permite controlar gran cantidad de detalles
Fácil para uso básico
Comunidad de usuarios activos
aRtsy: Generative Art with R and ggplot2
ggplot
Basado en la gramática layered grammar of graphics - Bertin 1983, Wilkinson et al. 2005, Wickham 2010.
Data - dataset a graficar; necesita formato tidy data
Aesthetics - describe cómo se asignan las variables del dataset (y sus escalas) a las propiedades visuales (x, y, size, colour, fill, group, sise, shape. . . )
Geometries - determina la forma de representar los datos (geoms: points, lines, bars, boxplot. . . )
Scales - maneja las escalas de los aesthetics (x & y format, colors continuous or discrete, sizes, shapes. . . )
Facets - crea subplots (facet_wrap or facet_grid. . . )
Themes - apariencia general del gráfico, no ligada a los datos (title, x.axis.text, legend. . . )
Statistics - resume los datos con estadísticos. Muchas veces ya va implícito en el “geom” (stats: count, density, bins, means, density. . . )
Coordinate system - determina el sistema de coordenadas a usar en los ejes (cartesian, polar, map projections. . . )
*Capas necesarias
Van refereridas a las variables o aethetics (aes):
Paletas de color:
[1] "geom_abline" "geom_area" "geom_bar"
[4] "geom_bin_2d" "geom_bin2d" "geom_blank"
[7] "geom_boxplot" "geom_col" "geom_contour"
[10] "geom_contour_filled" "geom_count" "geom_crossbar"
[13] "geom_curve" "geom_density" "geom_density_2d"
[16] "geom_density_2d_filled" "geom_density2d" "geom_density2d_filled"
[19] "geom_dotplot" "geom_errorbar" "geom_errorbarh"
[22] "geom_freqpoly" "geom_function" "geom_hex"
[25] "geom_histogram" "geom_hline" "geom_jitter"
[28] "geom_label" "geom_line" "geom_linerange"
[31] "geom_map" "geom_path" "geom_point"
[34] "geom_pointrange" "geom_polygon" "geom_qq"
[37] "geom_qq_line" "geom_quantile" "geom_raster"
[40] "geom_rect" "geom_ribbon" "geom_rug"
[43] "geom_segment" "geom_sf" "geom_sf_label"
[46] "geom_sf_text" "geom_smooth" "geom_spoke"
[49] "geom_step" "geom_text" "geom_tile"
[52] "geom_violin" "geom_vline"
Seleccionar datos con información para diámetro de tronco. Sólo hay informacion para el sitio llamado “AND”.
Contar número de casos: stat = "count"
Para datos resumidos - alternativa 1:
Usar valores ya calculados: stat = "identity"
Para datos resumidos - alternativa 2:
Calcular valores dentro de ggplot: stat = "summary"
Ordernar eje de la X en base a valores del eje de la Y
ggplot(dt_diam,
aes(x = reorder(species_name, stem_cm),
y = stem_cm)) +
geom_violin() +
geom_jitter(alpha = 0.5) +
theme_linedraw() +
theme(axis.text.x = element_text(
angle = 90,
hjust = 1, vjust = 0.5,
face = "italic"),
axis.text.y = element_text(
size = 15, face = "bold")) +
labs(x = NULL,
y = "Stem diameter (cm)",
title = "Diameter of Pinaceae species in USA National Parks")
Para fijar un tema que se aplique a todos los gráficos:
Existen muchos paquetes con temas predeterminados. Muchos también vienen con especificaciones para las escalas de los aesthetics (scales). Ejemplos:
library(ggThemeAssist)
es una addin de RStudio que ayuda a cambiar la apariencia de los temas. https://github.com/calligross/ggthemeassist
library(patchwork)
Nombrar los plots como objetos
Argumentos:
library(ggdist)
- graficar datos con distribuciones amplias (ej. Bayes posteriors).
library(ggrepel)
- etiquetar datos
https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html
library(GGally)
- exploración de datos y relación entre variables.
library(gganimate)
- animar gráficos
library(ggtext)
-
library(ggforce)
- resaltar características de los datos.
https://github.com/erikgahner/awesome-ggplot2
https://exts.ggplot2.tidyverse.org/gallery/
Con el dataset completo (dt) genera un violin plot del número de frutos por m2 (fruits) en escala logarítmica para los distintos tipos de crecimiento (growth_form)
Con el dataset completo (dt) genera un violin plot del número de frutos por m2 (fruits) en escala logarítmica para los distintos tipos de crecimiento (growth_form)
Para las distintas especies del género Quercus, sacar una tendencia del número de frutos por m2 a lo largo de los años.
Para las distintas especies del género Quercus, sacar una tendencia del número de frutos por m2 a lo largo de los años.
dt |> filter(genus == "Quercus") |>
ggplot(aes(x = year,
y = fruits,
color = species_name)) +
geom_point(alpha = 0.4, size = 2) +
geom_smooth() +
scale_color_viridis_d() +
facet_wrap(~species_name, scales = "free", nrow = 1) +
theme(legend.position = "none",
axis.text.x = element_text(angle = 60, hjust = 1),
strip.text = element_text(face = "italic")) +
labs(x = "Year",
y = "Fruits per m2")
Replica las gráficas de esta figura (lo más similar posible):
Alternativa 1 - Sacar primero la media y la SE del número de frutos y luego graficar
dt |>
#remove outlier year
filter(!(site == "BNZ" & year == 1958)) |>
group_by(site, year) |>
summarise(mean_fruits = mean(fruits, na.rm = TRUE),
se_fruits = sd(fruits, na.rm = TRUE)/sqrt(n())) |>
ggplot(aes(x = year, y = mean_fruits)) +
geom_point() +
geom_errorbar(aes(ymin = mean_fruits - se_fruits,
ymax = mean_fruits + se_fruits)) +
geom_line() +
facet_wrap(~site, scales = "free") +
theme_bw()
Alternativa 2 - Sacar la media y la SE de los frutos dentro de ggplot
dt |>
#remove outlier year
filter(!(site == "BNZ" & year == 1958)) |>
ggplot(aes(x = year, y = fruits)) +
geom_point(stat = "summary", fun = "mean") +
geom_line(stat = "summary", fun = "mean") +
stat_summary(
fun.data = "mean_se",
geom = "errorbar",
width = 0.2) +
facet_wrap(~site, scales = "free") +
theme_bw()