library(dplyr)
library(ggplot2)
library(ggridges)
Graficar muestreos de tallas en R
En este post vamos a mostrar como utilizar ggplot2
y ggridges
para graficar estructuras de tallas a lo largo de los años en R.
Recuerda que tenemos diversos posts sobre programación, pesquerías, ecología, entre otros. Te invitamos a revisar la lista en nuestra sección Posts.
Comenzamos cargando las librerías que utilizaremos:
Primero pasamos a explorar las bases de datos que vamos a utilizar. En este caso, tenemos muestreos de tallas de una pesquería y de una campaña de investigación desde 1995 hasta 2020. Se tienen marcas de clase (len_bin
) desde 2 hasta 130 cm. Para todos los años se han muestreado 100 embarcaciones (Nsamp
). La columna prop
muestra la proporción para cada marca de clase, mientras que la columna freq
es la frecuencia de individuos.
Las bases de datos son:
head(fish_data) # pesqueria
year Nsamp len_bin prop freq
1 1995 50 2 0 0
2 1996 50 2 0 0
3 1997 50 2 0 0
4 1998 50 2 0 0
5 1999 50 2 0 0
6 2000 50 2 0 0
head(surv_data) # campana investigacion
year Nsamp len_bin prop freq
1 1995 100 2 0 0
2 1996 100 2 0 0
3 1997 100 2 0 0
4 1998 100 2 0 0
5 1999 100 2 0 0
6 2000 100 2 0 0
Como vemos, ambas bases de datos estan ordenadas de manera longitudinal (i.e., cada columna es una variable diferente), lo cual es altamente recomendado. Antes de realizar los gráficos, procedemos a unir ambas bases de datos en una única base diferenciando la fuente (type
):
= fish_data %>% mutate(type = 'Fishery')
fish_data = surv_data %>% mutate(type = 'Survey')
surv_data = bind_rows(fish_data, surv_data)
all_data head(all_data)
year Nsamp len_bin prop freq type
1 1995 50 2 0 0 Fishery
2 1996 50 2 0 0 Fishery
3 1997 50 2 0 0 Fishery
4 1998 50 2 0 0 Fishery
5 1999 50 2 0 0 Fishery
6 2000 50 2 0 0 Fishery
Ejemplo 1
Primero vamos a graficar los muestreos de tallas (proporción por marca de clase por año), diferenciando la fuente de datos. Para esto, vamos a usar la función geom_density_ridges
:
= ggplot(all_data, aes(x=len_bin, y=factor(year), height=prop, fill=type)) +
p1 geom_density_ridges(stat='identity', alpha = 0.5) +
scale_x_continuous(name="Total Length (cm)") +
guides(fill = guide_legend(title = 'Data source:')) +
ylab('Year') + theme_bw() + theme(legend.position = 'top')
print(p1)
Ejemplo 2
Ahora vamos a realizar una gráfica similar pero de forma suavizada. Esto nos permite apreciar de mejor manera las cohortes a través de los años. Pero primero debemos organizar nuestra base de datos de modo que cada fila sea un individuo muestreado. Para esto vamos a repetir las filas tantas veces como freq
tengamos utilizando la función uncount
:
= all_data %>% tidyr::uncount(freq) all_data
Ahora procedemos a hacer el gráfico:
= ggplot(all_data, aes(x=len_bin, y=factor(year), fill=type)) +
p2 geom_density_ridges(alpha = 0.5) +
scale_x_continuous(name="Total Length (cm)") +
guides(fill = guide_legend(title = 'Data source:')) +
ylab('Year') + theme_bw() + theme(legend.position = 'top')
print(p2)
Ejemplo 3
Para este último ejemplo, vamos a graficar la estructura de tallas por año para los datos que provienen de la pesquería, diferenciando juveniles y adultos. Para esto, vamos a asumir que tallas menores a 42 cm son juveniles:
= fish_data %>%
fish_data mutate(stage = if_else(condition = len_bin < 42, true = 'Juvenile', false = 'Adult'))
Ahora vamos a graficar:
= ggplot(fish_data, aes(x=len_bin, y=factor(year), height=prop*5,
p3 group = factor(year), fill=factor(stage))) +
geom_ridgeline_gradient() +
scale_x_continuous(name="Total Length (cm)") +
scale_fill_viridis_d() +
guides(fill = guide_legend(title = 'Stage:')) +
ylab('Year') + theme_bw() + theme(legend.position = 'top')
print(p3)
Conclusión
Esta forma de graficar estructuras de tallas a lo largo del tiempo nos permite seguir cohortes y diferenciarlas de mejor manera.
- ¿Por qué es importante analizar la estructura de tallas cuando estudiamos un stock explotado?
- ¿Qué información podemos extraer a partir de la estructura de tallas?
- ¿Por qué hay diferencia en la estructura de tallas entre la pesquería y la campaña de investigación?