This vignette will show a few examples of how to use the datasets in fishdata
. As always, start by loading the fishdata
package, plus some extra packages for data manipulation and visualisation.
library(fishdata)
library(dplyr)
library(tidyr)
library(ggplot2)
Lets start by asking a simple question: “How many juvenile whitebait did I catch each time I went fishing?”. To answer this, we’ll need the juveniles
dataset.
data("juveniles")
<- juveniles %>%
catches group_by(catch_date) %>%
summarise(num = n())
ggplot(catches, aes(x = catch_date, y = num)) +
geom_col() +
labs(y = "Number caught")
We can see a relatively constant pattern of catches, but definately tailing off at the end of November. That was the end of the fishing season in New Zealand, so possibly seeing lower recruitment then.
We actually have two sites, so lets add site data into our graph above and see how that changes things.
<- juveniles %>%
catches_site group_by(site, catch_date) %>%
summarise(num = n())
ggplot(catches_site, aes(x = catch_date, y = num)) +
geom_col() +
facet_wrap(~site)
Couple of interesting differences to note here: 1) Hutt appears to be more consistent, and has fewer low catch days, and 2) the dropoff at end of November was even more present in Wainuiomata where there were zero fish caught.
Lets now look at age frequencies across sites and months. To do this, we need to add our metrics data to our base data. We do this with a left join.
data("juvenile_metrics")
<- juveniles %>%
juv left_join(juvenile_metrics, 'fish_code')
ggplot(juv, aes(x = age, fill = site)) +
geom_density() +
facet_wrap(~month)
Looks pretty similar overall. Shame about the missing data in November.
Lets do something really cool - reconstructing daily growth patterns using the otolith growth data. Since there are hundreds of fish, we’ll just take a random sample of 4 fish and plot them. We’ll need the juveniles
dataset for catch times and locations, and juvenile_growth
for the daily data.
data("juvenile_growth")
# Take random sample of fish
set.seed(123)
<- juvenile_growth %>%
random_juvs filter(fish_code %in% sample(unique(juvenile_growth$fish_code), 4, replace = F))
ggplot(random_juvs, aes(x = period, y = position)) +
geom_line() +
facet_wrap(~fish_code)
These aren’t the most interesting fish, as they appear to have pretty linear growth across their life. However, it’s still cool we can access data like this.
Lets now join onto the ‘metrics’ dataset and use that to access these fishes average growth rate, and add that onto the plot.
data("juvenile_metrics")
<- select(juvenile_metrics, fish_code, growth_rate)
juv_mets
# Use left_join to add the growth rate data, summarise to get the average, then add some good text positions for the plot.
<- random_juvs %>%
random_juvs_with_g_rate left_join(juv_mets, 'fish_code') %>%
group_by(fish_code) %>%
summarise(g_rate = mean(growth_rate)) %>%
mutate(y = 250,
x = 45)
ggplot() +
geom_line(data = random_juvs, aes(x = period, y = position)) +
geom_text(data = random_juvs_with_g_rate, aes(x = x,
y = y,
label = paste0(round(g_rate, 2), " mm/day"))) +
facet_wrap(~fish_code)
Adult columns are almost identical to the juvenile columns, so can be used in much the same way as the data above.