Graficar muestreos de tallas en R

Author

Giancarlo M. Correa

Published

November 13, 2023

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.

Explora nuestros posts

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:

library(dplyr)
library(ggplot2)
library(ggridges)

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 = fish_data %>% mutate(type = 'Fishery')
surv_data = surv_data %>% mutate(type = 'Survey')
all_data = bind_rows(fish_data, surv_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:

p1 = ggplot(all_data, aes(x=len_bin, y=factor(year), height=prop, fill=type)) +
  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 = all_data %>% tidyr::uncount(freq)

Ahora procedemos a hacer el gráfico:

p2 = ggplot(all_data, aes(x=len_bin, y=factor(year), fill=type)) +
  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:

p3 = ggplot(fish_data, aes(x=len_bin, y=factor(year), height=prop*5, 
                           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.

Para analizar
  • ¿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?