Can we pull most recent recruitment and SSB or other B outputs from Northeast US stock assessments? Which species do we have? What units are recruitments in?
NErec <- stocksmart::stockAssessmentData %>%
filter(RegionalEcosystem == "Northeast Shelf",
Metric == "Recruitment") %>%
group_by(StockName) %>%
filter(AssessmentYear == max(AssessmentYear)) %>%
ungroup()
sppunits <- NErec %>%
select(StockName, StockArea, Description, Units) %>%
distinct()
datatable(sppunits, rownames = FALSE,
options = list(scrollX = TRUE,
pageLength = 10))
Lets check the units for biomass too.
NEbio <- stocksmart::stockAssessmentData %>%
filter(RegionalEcosystem == "Northeast Shelf",
Metric == "Abundance") %>%
group_by(StockName) %>%
filter(AssessmentYear == max(AssessmentYear)) %>%
ungroup()
sppunits <- NEbio %>%
select(StockName, StockArea, Description, Units) %>%
distinct()
datatable(sppunits, rownames = FALSE,
options = list(scrollX = TRUE,
pageLength = 10))
Select down to stocks used in SOE productivity anomaly indicator? Won’t split them by EPU but could map some stocks to different regions kinda. Or just pick MA managed stocks in stocksmart? Here just trying to get a list of stocks that have both recruitment and biomass in stocksmart. Weeding out recruitment measures that are not in numbers for now.
Also, lets not use assessments prior to 2019.
# first pass only stocks with both rec in N and bio but keep all years of bio
NErecN <- NErec %>%
filter(AssessmentYear>2018,
Units %in% c("Thousand Recruits",
"Number x 1,000,000",
"Number x 1,000",
"Million Recruits"))
NErecstocks <- NErecN %>%
select(StockName) %>%
distinct()
NEbiohasrec <- NEbio %>%
filter(StockName %in% NErecstocks$StockName)
Next steps:
Reconcile the units so inputs are the same across stocks
Units of recruitment in numbers of fish at age 1 is the input to the survey based productivity anomaly indicator. We’ll need to convert all to numbers and note the age of recruitment for each stock to shift recruitment appropriately.
NErecNstd <- NErecN %>%
mutate(NfishRec = case_when(Units == "Thousand Recruits" ~ Value*1000,
Units == "Number x 1,000,000" ~ Value*1000000,
Units == "Number x 1,000" ~ Value*1000,
Units == "Million Recruits" ~ Value*1000000,
TRUE ~ as.numeric(NA)),
AgeRec = as.numeric(stringr::str_extract(Description, "(\\d)+")),
SSByr = Year-AgeRec
)
Plot each Rec series by SSByr
ggplot(NErecNstd, aes(x=SSByr, y=NfishRec)) +
geom_line() +
theme_bw() +
facet_wrap(~StockName, ncol = 3, scales = "free",
labeller = labeller(StockName = label_wrap_gen(35)))
Units of biomass (all listed as mature/spawning stock or retro adjusted spawning stock) are converted to kg for similarity with survey anomaly code.
NEbioBstd <- NEbiohasrec %>%
mutate(SSBkg = case_when(Units == "Thousand Metric Tons" ~ Value*1000000,
Units == "Metric Tons" ~ Value*1000,
TRUE ~ as.numeric(NA))
#AgeRec = as.numeric(stringr::str_extract(Description, "(\\d)+")),
#SSByr = Year-AgeRec
)
Plot each SSB series by Year
ggplot(NEbioBstd, aes(x=Year, y=SSBkg)) +
geom_line() +
theme_bw() +
facet_wrap(~StockName, ncol = 3, scales = "free",
labeller = labeller(StockName = label_wrap_gen(35)))
For the survey data, this is in trawlr
package func-data.R
, function calc_rec()
starting line 798.
Current SOE indicator using rs_anom
output of this as input for plotting so need to calculate equivalent of that one.
Modify code to take stocksmart
inputs converted to common units. Because the survey anomalies are calculated in numbers of small fish per kg mature biomass we will convert assessments to those same units.
This is trawlr::calc_z
used in calc_rec()
# ---------------------------------------------------------
#' Calculate z-score of vector
#'
#'
#' @param x vector of which to calculate z-score
#'
#' @param ... other params that can be fed to mean() or sd()
#'
#' @return vector of z-score values of x
#'
#' @examples
#'
#' x_zscore <- calc_z(x = c(1:10), na.rm = T)
#'
#' @export
calc_z <- function(x, ...) {
(x - mean(x, ...))/sd(x, ...)
}
This is trawlr::calc_rec()
full code.
#' Calculate spawner-recruit anomalies
#'
#' Calculates a time series of spawner-recruit anomalies
#' (and other anomalies) for all species in survdat. Survdat
#' must have biological and epu data, so \emph{load_survdat()}
#' must have been called with \emph(with_bio_epu) = TRUE.
#'
#' @param survdat dataframe; from \emph{load_survdat()}
#' called with \emph{with_bio_epu} = TRUE.
#'
#' @param min_year numeric value; minimum year to include
#' in the recruitment calculations.
#'
#' @param max_year numeric value; maximum year to include
#' in the recruitment calculations.
#'
#' @param by_epu logical; if TRUE recruitment variables are
#' calculated per ecological production unit
#' (EPU).
#'
#' @param by_taxon logical; if TRUE recruitment variables are
#' calculated per ecological production unit
#' (EPU).
#'
#'
#' @return dataframe with recruitment related variables.
#'
#' @examples
#' calc_rec(survdat = survdat,
#' min_year = 1980, max_year = 2008,
#' by_epu = TRUE, by_taxon = FALSE)
#'
#' @export
calc_rec <- function(survdat,
min_year,
max_year,
by_epu,
by_taxon,
by_season = FALSE,
len_cutoff = 0.2) {
# Calculate the mean length at age-1 for species
# with age data
df_len_at_age1 <-
survdat %>%
dplyr::filter(YEAR >= (min_year - 1),
YEAR <= (max_year + 1),
!is.na(AGE),
!is.na(LENGTH)) %>%
dplyr::group_by(COMNAME, SCINAME) %>%
dplyr::do(fit_length_at_age1(AGE = .$AGE,
LENGTH = .$LENGTH))
# Calculate the number of tows in each survey season
dat_tows <-
survdat %>%
dplyr::distinct(CRUISE6, YEAR, SEASON, STATION, STRATUM) %>%
dplyr::select(CRUISE6, YEAR, SEASON) %>%
dplyr::group_by(CRUISE6, YEAR, SEASON) %>%
dplyr::summarise(n_tows = n())
dat_spec_rec <-
survdat %>%
dplyr::left_join(dat_tows) %>%
dplyr::left_join(df_len_at_age1) %>%
dplyr::group_by(COMNAME, SCINAME) %>%
dplyr::filter(EPU %in% c("MAB", "GB", "GOM")) %>%
dplyr::filter(YEAR >= (min_year - 1),
YEAR <= (max_year + 1)) %>%
#dplyr::do(trawlr::calc_lw(dat = .)) %>%
dplyr::group_by(., COMNAME) %>%
{ if (by_epu) dplyr::group_by(., EPU, add = T) else . } %>%
{ if (by_taxon) dplyr::group_by(., order, add = T) else . } %>%
{ if (by_season) dplyr::group_by(., SEASON, add = T) else . } %>%
dplyr::mutate(rank_LENGTH = dplyr::cume_dist(LENGTH),
NUMLEN = as.numeric(NUMLEN),
INDWT = as.numeric(INDWT),
WTperLENGTH = INDWT / LENGTH) %>%
# Remove NA's
dplyr::filter(!is.na(rank_LENGTH)) %>%
# If length at age1 exists use it, else use the length
# cutoff
dplyr::mutate(maturity = ifelse(is.na(length_at_age1),
ifelse(rank_LENGTH > len_cutoff,
"spawner",
"recruit"),
ifelse(LENGTH > length_at_age1,
"spawner",
"recruit"))
) %>%
dplyr::mutate(ind_sp_abund = ifelse(maturity == "spawner",
NUMLEN,
0),
ind_rec_abund = ifelse(maturity == "recruit",
NUMLEN,
0),
ind_sp_wl = ifelse(maturity == "spawner",
WTperLENGTH,
NaN),
ind_rec_wl = ifelse(maturity == "recruit",
WTperLENGTH,
NaN),
ind_sp_wl_res = ifelse(maturity == "spawner",
(INDWT - INDWT_ALLPRED),
NaN),
ind_rec_wl_res = ifelse(maturity == "recruit",
(INDWT - INDWT_ALLPRED),
NaN)) %>%
{ if (by_taxon == TRUE & by_epu == TRUE) {
dplyr::group_by(., YEAR, SEASON,
SCINAME, COMNAME, EPU, order)
} else if (by_epu == TRUE) {
dplyr::group_by(., YEAR, SEASON,
SCINAME, COMNAME, EPU)
} else {
dplyr::group_by(., YEAR, SEASON,
SCINAME, COMNAME)
}
} %>%
dplyr::summarise(n_tows = unique(n_tows),
spawners_abund = sum(ind_sp_abund, na.rm = T)/n_tows,
spawners_biom = sum(ind_sp_abund *
INDWT_PRED, na.rm = T)/n_tows,
recruits_abund = sum(ind_rec_abund, na.rm = T)/n_tows,
recruits_biom = sum(ind_rec_abund *
INDWT_PRED, na.rm = T)/n_tows,
spawner_wl = mean(ind_sp_wl, na.rm = T),
recruit_wl = mean(ind_rec_wl, na.rm = T),
spawner_wl_res = mean(ind_sp_wl_res,
na.rm = T),
recruit_wl_res = mean(ind_rec_wl_res,
na.rm = T)) %>%
# Calculate log(R/S), log(R), log(S)
dplyr::ungroup(.) %>%
{ if (by_taxon == TRUE & by_epu == TRUE) {
dplyr::arrange(., SEASON,
COMNAME, SCINAME, EPU, order, YEAR) %>%
dplyr::group_by(., SEASON,
COMNAME, SCINAME, EPU, order)
} else if (by_epu == TRUE) {
dplyr::arrange(., SEASON,
COMNAME, SCINAME, EPU, YEAR) %>%
dplyr::group_by(., SEASON,
COMNAME, SCINAME, EPU)
} else if (by_taxon == TRUE) {
dplyr::arrange(., SEASON,
COMNAME, SCINAME, order, YEAR) %>%
dplyr::group_by(., SEASON,
COMNAME, SCINAME, order)
} else {
dplyr::arrange(., SEASON,
COMNAME, SCINAME, YEAR) %>%
dplyr::group_by(., SEASON,
COMNAME, SCINAME)
}
} %>%
dplyr::mutate(recruits_biom_lead1 = dplyr::lead(recruits_biom,
n = 1),
recruits_abund_lead1 = dplyr::lead(recruits_abund,
n = 1),
rs = recruits_abund_lead1/
spawners_biom,
rs_abund = recruits_abund_lead1/
spawners_abund,
rs_biom = recruits_biom_lead1/
spawners_biom,
logr_abund = log(recruits_abund_lead1),
logr_biom = log(recruits_biom_lead1),
logs_abund = log(spawners_abund),
logs_biom = log(spawners_biom),
logrs = log(rs),
logrs_abund = log(rs_abund),
logrs_biom = log(rs_biom),
spawners_abund_lag0_anom =
trawlr::calc_z(spawners_abund,
na.rm = T),
spawners_biom_lag0_anom =
trawlr::calc_z(spawners_biom,
na.rm = T),
recruits_abund_lead1_anom =
trawlr::calc_z(recruits_abund_lead1,
na.rm = T),
recruits_biom_lead1_anom =
trawlr::calc_z(recruits_biom_lead1,
na.rm = T),
rs_anom = trawlr::calc_z(rs,
na.rm = T),
rs_abund_anom = trawlr::calc_z(rs_abund,
na.rm = T),
rs_biom_anom = trawlr::calc_z(rs_biom,
na.rm = T),
logr_abund_anom =
trawlr::calc_z(logr_abund),
logr_biom_anom =
trawlr::calc_z(logr_biom),
logs_abund_anom =
trawlr::calc_z(logs_abund, na.rm = T),
logs_biom_anom =
trawlr::calc_z(logs_biom, na.rm = T),
logrs_anom =
trawlr::calc_z(logrs, na.rm = T),
logrs_abund_anom =
trawlr::calc_z(logrs_abund, na.rm = T),
logrs_biom_anom =
trawlr::calc_z(logrs_biom, na.rm = T),
spawner_wl_anom =
trawlr::calc_z(spawner_wl),
recruit_wl_lead1 = dplyr::lead(recruit_wl, n = 1),
recruit_wl_lead1_anom =
trawlr::calc_z(recruit_wl_lead1),
spawner_wl_res_anom =
trawlr::calc_z(spawner_wl_res),
recruit_wl_res_lead1 = dplyr::lag(recruit_wl_res, n = 1),
recruit_wl_res_lead1_anom =
trawlr::calc_z(recruit_wl_res_lead1)) %>%
# Remove year before minimum and year after maximum
dplyr::filter(YEAR >= min_year,
YEAR <= max_year) %>%
#Average seasonal anomalies to get yearly anomaly
dplyr::group_by(., YEAR, SCINAME, COMNAME) %>%
{ if (by_epu) dplyr::group_by(., EPU, add = T) else . } %>%
{ if (by_taxon) dplyr::group_by(., order, add = T) else . } %>%
{ if (by_season) dplyr::group_by(., SEASON, add = T) else . } %>%
dplyr::summarise(
spawners_abund_lag0 = mean(spawners_abund,
na.rm = T),
spawners_abund_lag0_anom = mean(spawners_abund_lag0_anom,
na.rm = T),
spawners_biom_lag0 = mean(spawners_biom, na.rm = T),
spawners_biom_lag0_anom = mean(spawners_biom_lag0_anom,
na.rm = T),
recruits_abund = mean(recruits_abund, na.rm = T),
recruits_abund_lead1 = mean(recruits_abund_lead1,
na.rm = T),
recruits_abund_lead1_anom = mean(recruits_abund_lead1_anom,
na.rm = T),
recruits_biom_lead1 = mean(recruits_biom_lead1,
na.rm = T),
recruits_biom_lead1_anom = mean(recruits_biom_lead1_anom,
na.rm = T),
rs = mean(rs, na.rm = T),
rs_abund = mean(rs_abund, na.rm = T),
rs_biom = mean(rs_biom, na.rm = T),
rs_anom = mean(rs_anom, na.rm = T),
rs_abund_anom = mean(rs_abund_anom, na.rm = T),
rs_biom_anom = mean(rs_biom_anom, na.rm = T),
logr_abund_anom = mean(logr_abund_anom,
na.rm = T),
logr_biom_anom = mean(logr_biom_anom,
na.rm = T),
logs_abund_anom = mean(logs_abund_anom,
na.rm = T),
logs_biom_anom = mean(logs_biom_anom,
na.rm = T),
logrs_anom = mean(logrs_anom, na.rm = T),
logrs_abund_anom = mean(logrs_abund_anom,
na.rm = T),
logrs_biom_anom = mean(logrs_biom_anom,
na.rm = T),
spawner_wl_anom = mean(spawner_wl_anom,
na.rm = T),
recruit_wl_lead1_anom = mean(recruit_wl_lead1_anom,
na.rm = T),
spawner_wl_res_anom = mean(spawner_wl_res_anom,
na.rm = T),
recruit_wl_res_lead1_anom = mean(recruit_wl_res_lead1_anom,
na.rm = T))
return(dat_spec_rec)
}
This is the bit I’ve pulled out to use with the stock assessment recruitment and SSB series standardized above.
# dataset with each species std rec in SSByr and SSB
SSrecbio <- NErecNstd %>%
select(StockName, SSByr, NfishRec) %>%
left_join(NEbioBstd, by = c("StockName" = "StockName",
"SSByr"="Year")) %>%
select(StockName, SSByr, NfishRec, SSBkg)
min_year <- 1980
max_year <- 2020
dat_spec_rec <- SSrecbio %>%
group_by(StockName) %>%
dplyr::mutate(#recruits_biom_lead1 = dplyr::lead(recruits_biom,
# n = 1),
recruits_abund_lead1 = NfishRec, #dplyr::lead(recruits_abund,
# n = 1),
spawners_biom = SSBkg,
YEAR = SSByr,
rs = recruits_abund_lead1/
spawners_biom,
#rs_abund = recruits_abund_lead1/
# spawners_abund,
#rs_biom = recruits_biom_lead1/
# spawners_biom,
logr_abund = log(recruits_abund_lead1),
#logr_biom = log(recruits_biom_lead1),
#logs_abund = log(spawners_abund),
logs_biom = log(spawners_biom),
logrs = log(rs),
#logrs_abund = log(rs_abund),
#logrs_biom = log(rs_biom),
#spawners_abund_lag0_anom =
# ''calc_z(spawners_abund,
# na.rm = T),
spawners_biom_lag0_anom =
calc_z(spawners_biom,
na.rm = T),
recruits_abund_lead1_anom =
calc_z(recruits_abund_lead1,
na.rm = T),
#recruits_biom_lead1_anom =
# calc_z(recruits_biom_lead1,
# na.rm = T),
rs_anom = calc_z(rs,
na.rm = T),
#rs_abund_anom = calc_z(rs_abund,
# na.rm = T),
#rs_biom_anom = calc_z(rs_biom,
# na.rm = T),
logr_abund_anom =
calc_z(logr_abund),
#logr_biom_anom =
# calc_z(logr_biom),
#logs_abund_anom =
# calc_z(logs_abund, na.rm = T),
logs_biom_anom =
calc_z(logs_biom, na.rm = T),
logrs_anom =
calc_z(logrs, na.rm = T),
#logrs_abund_anom =
# calc_z(logrs_abund, na.rm = T),
#logrs_biom_anom =
# calc_z(logrs_biom, na.rm = T),
#spawner_wl_anom =
# calc_z(spawner_wl),
#recruit_wl_lead1 = dplyr::lead(recruit_wl, n = 1),
#recruit_wl_lead1_anom =
# calc_z(recruit_wl_lead1),
#spawner_wl_res_anom =
# calc_z(spawner_wl_res),
#recruit_wl_res_lead1 = dplyr::lag(recruit_wl_res, n = 1),
#recruit_wl_res_lead1_anom =
# calc_z(recruit_wl_res_lead1)
) %>%
# Remove year before minimum and year after maximum
dplyr::filter(YEAR >= min_year,
YEAR <= max_year) %>%
#Average seasonal anomalies to get yearly anomaly
dplyr::group_by(., YEAR, StockName) %>% #SCINAME, COMNAME) %>%
# { if (by_epu) dplyr::group_by(., EPU, add = T) else . } %>%
# { if (by_taxon) dplyr::group_by(., order, add = T) else . } %>%
# { if (by_season) dplyr::group_by(., SEASON, add = T) else . } %>%
dplyr::summarise(
# spawners_abund_lag0 = mean(spawners_abund,
# na.rm = T),
# spawners_abund_lag0_anom = mean(spawners_abund_lag0_anom,
# na.rm = T),
spawners_biom_lag0 = mean(spawners_biom, na.rm = T),
spawners_biom_lag0_anom = mean(spawners_biom_lag0_anom,
na.rm = T),
#recruits_abund = mean(recruits_abund, na.rm = T),
recruits_abund_lead1 = mean(recruits_abund_lead1,
na.rm = T),
recruits_abund_lead1_anom = mean(recruits_abund_lead1_anom,
na.rm = T),
# recruits_biom_lead1 = mean(recruits_biom_lead1,
# na.rm = T),
# recruits_biom_lead1_anom = mean(recruits_biom_lead1_anom,
# na.rm = T),
rs = mean(rs, na.rm = T),
# rs_abund = mean(rs_abund, na.rm = T),
# rs_biom = mean(rs_biom, na.rm = T),
rs_anom = mean(rs_anom, na.rm = T),
# rs_abund_anom = mean(rs_abund_anom, na.rm = T),
# rs_biom_anom = mean(rs_biom_anom, na.rm = T),
logr_abund_anom = mean(logr_abund_anom,
na.rm = T),
# logr_biom_anom = mean(logr_biom_anom,
# na.rm = T),
# logs_abund_anom = mean(logs_abund_anom,
# na.rm = T),
logs_biom_anom = mean(logs_biom_anom,
na.rm = T),
logrs_anom = mean(logrs_anom, na.rm = T),
# logrs_abund_anom = mean(logrs_abund_anom,
# na.rm = T),
# logrs_biom_anom = mean(logrs_biom_anom,
# na.rm = T),
# spawner_wl_anom = mean(spawner_wl_anom,
# na.rm = T),
# recruit_wl_lead1_anom = mean(recruit_wl_lead1_anom,
# na.rm = T),
# spawner_wl_res_anom = mean(spawner_wl_res_anom,
# na.rm = T),
# recruit_wl_res_lead1_anom = mean(recruit_wl_res_lead1_anom,
# na.rm = T)
)
Sub in interactive plots from here
# modify from 2-load,R
dat_spec_rec_SS <-
dat_spec_rec %>%
ungroup %>%
dplyr::select(YEAR, StockName, rs_anom) %>%
dplyr::rename(Time = YEAR,
Value = rs_anom) %>%
dplyr::mutate(Units = "anomaly (r/s)",
Var = StockName,
Source = "stocksmart") %>%
dplyr::select(-StockName)
#### Adjust plot properties -------------------------------
adjustAxes <-
ggplot2::theme(axis.title = element_text(size = 18),
axis.text = element_text(size = 15),
plot.title = element_text(size = 20))
### Plot function with interactive bars to see which species
#### Plot stacked bar with cpts for single var ------------
plot_stackbarcpts_single <- function(YEAR, var2bar,
x, xlab, ylab,
titl,
file_suffix,
leg_font_size = 10,
remove_leg = FALSE,
leg_ncol = 1,
wcpts = TRUE,
wdashed = TRUE,
height = 5.5,
width = 8,
filt = TRUE,
label = label,
y.text = y.text,
aggregate = FALSE,
intplot = FALSE) {
dat2bar <- data.frame(YEAR, var2bar,
x)
if (filt == TRUE){mab_species <- list("SUMMER FLOUNDER","SCUP","BLACK SEA BASS","BLUEFISH",
"NORTHERN SHORTFIN SQUID", "LONGFIN SQUID", "ATLANTIC MACKEREL",
"BUTTERFISH","ATLANTIC SURFCLAM", "OCEAN QUAHOG", "TILEFISH",
"BLUELINE TILEFISH","SPINY DOGFISH", "GOOSEFISH")
dat2plot <-
dat2bar %>%
tidyr::gather(variable, value, -YEAR, -var2bar) %>%
dplyr::mutate(var2bar = gsub(pattern = "_",
replacement = " ",
x = var2bar),
var2bar = gsub(pattern = "Atl.",
replacement = "ATLANTIC",
x = var2bar),
var2bar = gsub(pattern = "Atl",
replacement = "ATLANTIC",
x = var2bar),
var2bar = gsub(pattern = "NS and combined",
replacement = "",
x = var2bar),
var2bar = gsub(pattern = "YT",
replacement = "Yellowtail",
x = var2bar),
var2bar = gsub(pattern = " GoM",
replacement = " GOM",
x = var2bar),
var2bar = gsub(pattern = " by EPU",
replacement = "",
x = var2bar)) %>%
filter(var2bar %in% mab_species)
} else if (filt == FALSE){
dat2plot <-
dat2bar %>%
tidyr::gather(variable, value, -YEAR, -var2bar) %>%
dplyr::mutate(var2bar = gsub(pattern = "_",
replacement = " ",
# x = var2bar),
# var2bar = gsub(pattern = "Atl.",
# replacement = "ATLANTIC",
# x = var2bar),
# var2bar = gsub(pattern = "Atl",
# replacement = "ATLANTIC",
# x = var2bar),
# var2bar = gsub(pattern = "NS and combined",
# replacement = "",
# x = var2bar),
# var2bar = gsub(pattern = "YT",
# replacement = "Yellowtail",
# x = var2bar),
# var2bar = gsub(pattern = " GoM",
# replacement = " GOM",
# x = var2bar),
# var2bar = gsub(pattern = " by EPU",
# replacement = "",
x = var2bar))
}
if (aggregate){
agg <- dat2plot %>%
group_by(YEAR) %>%
dplyr::summarise(Total = sum(value, na.rm = T)) %>%
mutate(Total = ifelse(Total == 0, NA, Total))
}
p <-
ggplot(dat2plot,
aes(x = YEAR)) +
{if(intplot) geom_bar_interactive(data = dat2plot %>% filter(value > 0),
aes(y = value, fill = var2bar,
tooltip = var2bar, data_id = var2bar),
stat = "identity")} +
{if(intplot) geom_bar_interactive(data = dat2plot %>% filter(value < 0),
aes(y = value, fill = var2bar,
tooltip = var2bar, data_id = var2bar),
stat = "identity")} +
{if(!intplot) geom_bar(data = dat2plot %>% filter(value > 0),
aes(y = value, fill = var2bar),
stat = "identity")} +
{if(!intplot) geom_bar(data = dat2plot %>% filter(value < 0),
aes(y = value, fill = var2bar),
stat = "identity")} +
{if(aggregate) geom_line(data = agg,aes(x = YEAR, y = Total),
size = 1)} +
geom_hline(size = 0.3, aes(yintercept = 0)) +
xlab(xlab) +
ylab(ylab) +
ggtitle(titl) +
guides(fill = guide_legend(ncol = leg_ncol)) +
theme_ts()+
theme(axis.title = element_text(size = 16),
axis.text = element_text(size = 15),
plot.title = element_text(size = 20),
legend.text = element_text(size = leg_font_size),
legend.title = element_blank()) +
annotate("text", label = label, x = 1980, y = y.text,size = 8, colour = "black")
if(remove_leg) p <- p + theme(legend.position = "none")
return(p)
}
# bar_dat <- ecodata::productivity_anomaly %>%
# filter(EPU == "MAB")
# mafmc <-plot_stackbarcpts_single(YEAR = bar_dat$Time,
# var2bar = bar_dat$Var,
# x = bar_dat$Value,
# titl = "",
# xlab = "",
# ylab = "Small fish per large fish biomass (anomaly)",
# height = 5.5,
# width = 9,
# filt = TRUE,
# label = "A",
# y.text = 4.5)
#
bar_dat <- dat_spec_rec_SS
allstocks <- plot_stackbarcpts_single(YEAR = bar_dat$Time,
var2bar = bar_dat$Var,
x = bar_dat$Value,
titl = "All stocks",
xlab = "",
ylab = "Recruits/Mature biomass (anomaly)",
height = 5.5,
width = 9,
filt = FALSE,
label = "",
y.text = 10,
aggregate = TRUE,
intplot = TRUE,
remove_leg = TRUE)
#all
ggiraph(code = print(allstocks), pointsize = 14, width_svg = 8, height_svg = 6)
bar_dat <- dat_spec_rec_SS %>%
filter(Var %in% c("Atlantic mackerel - Gulf of Maine / Cape Hatteras",
"Tilefish - Mid-Atlantic Coast" ,
"Yellowtail flounder - Southern New England / Mid-Atlantic",
"Winter flounder - Southern New England / Mid-Atlantic" ,
"Summer flounder - Mid-Atlantic Coast" ,
"Scup - Atlantic Coast",
"Bluefish - Atlantic Coast",
"Black sea bass - Mid-Atlantic Coast",
"Butterfish - Gulf of Maine / Cape Hatteras"
))
midstocks <- plot_stackbarcpts_single(YEAR = bar_dat$Time,
var2bar = bar_dat$Var,
x = bar_dat$Value,
titl = "Mid-Atlantic stocks",
xlab = "",
ylab = "Recruits/Mature biomass (anomaly)",
height = 5.5,
width = 9,
filt = FALSE,
label = "",
y.text = 10,
aggregate = TRUE,
intplot = TRUE,
remove_leg = TRUE)
#all
ggiraph(code = print(midstocks), pointsize = 14, width_svg = 8, height_svg = 6)
For Mid-Atlantic stocks plot I am including:
Below the static plot code, still needs work
# static plot, needs legend tweakes
# plot functions
#source('~/Documents/0_Data/ESR/SOE2022/trawlr/run_for_soe/1-func.R')
# modify from 2-load,R
# dat_spec_rec_SS <-
# dat_spec_rec %>%
# ungroup %>%
# dplyr::select(YEAR, StockName, rs_anom) %>%
# dplyr::rename(Time = YEAR,
# Value = rs_anom) %>%
# dplyr::mutate(Units = "anomaly (r/s)",
# Var = StockName,
# Source = "stocksmart") %>%
# dplyr::select(-StockName)
#
# # modify from 4-do.R
# ## Recruit per spawner (all stocks in one figure) --------
# plot_stackbarcpts_single(YEAR = dat_spec_rec_SS$Time,
# var2bar = dat_spec_rec_SS$Var,
# x = dat_spec_rec_SS$Value,
# titl = "",
# xlab = "",
# ylab = "Recruits/Mature biomass (anomaly)",
# height = 5.5,
# width = 9)
dat_spec_reconly_SS <-
dat_spec_rec %>%
ungroup %>%
dplyr::select(YEAR, StockName, recruits_abund_lead1_anom) %>%
dplyr::rename(Time = YEAR,
Value = recruits_abund_lead1_anom) %>%
dplyr::mutate(Units = "anomaly",
Var = StockName,
Source = "stocksmart") %>%
dplyr::select(-StockName)
bar_dat <- dat_spec_reconly_SS
allstocks <- plot_stackbarcpts_single(YEAR = bar_dat$Time,
var2bar = bar_dat$Var,
x = bar_dat$Value,
titl = "All stocks",
xlab = "",
ylab = "Recruits (anomaly)",
height = 5.5,
width = 9,
filt = FALSE,
label = "",
y.text = 10,
aggregate = TRUE,
intplot = TRUE,
remove_leg = TRUE)
#all
ggiraph(code = print(allstocks), pointsize = 14, width_svg = 8, height_svg = 6)
bar_dat <- dat_spec_reconly_SS %>%
filter(Var %in% c("Atlantic mackerel - Gulf of Maine / Cape Hatteras",
"Tilefish - Mid-Atlantic Coast" ,
"Yellowtail flounder - Southern New England / Mid-Atlantic",
"Winter flounder - Southern New England / Mid-Atlantic" ,
"Summer flounder - Mid-Atlantic Coast" ,
"Scup - Atlantic Coast",
"Bluefish - Atlantic Coast",
"Black sea bass - Mid-Atlantic Coast",
"Butterfish - Gulf of Maine / Cape Hatteras"
))
midstocks <- plot_stackbarcpts_single(YEAR = bar_dat$Time,
var2bar = bar_dat$Var,
x = bar_dat$Value,
titl = "Mid-Atlantic stocks",
xlab = "",
ylab = "Recruits (anomaly)",
height = 5.5,
width = 9,
filt = FALSE,
label = "",
y.text = 10,
aggregate = TRUE,
intplot = TRUE,
remove_leg = TRUE)
#all
ggiraph(code = print(midstocks), pointsize = 14, width_svg = 8, height_svg = 6)
dat_spec_ssbonly_SS <-
dat_spec_rec %>%
ungroup %>%
dplyr::select(YEAR, StockName, spawners_biom_lag0_anom) %>%
dplyr::rename(Time = YEAR,
Value = spawners_biom_lag0_anom) %>%
dplyr::mutate(Units = "anomaly",
Var = StockName,
Source = "stocksmart") %>%
dplyr::select(-StockName)
bar_dat <- dat_spec_ssbonly_SS
allstocks <- plot_stackbarcpts_single(YEAR = bar_dat$Time,
var2bar = bar_dat$Var,
x = bar_dat$Value,
titl = "All stocks",
xlab = "",
ylab = "Mature biomass (anomaly)",
height = 5.5,
width = 9,
filt = FALSE,
label = "",
y.text = 10,
aggregate = TRUE,
intplot = TRUE,
remove_leg = TRUE)
#all
ggiraph(code = print(allstocks), pointsize = 14, width_svg = 8, height_svg = 6)
bar_dat <- dat_spec_ssbonly_SS %>%
filter(Var %in% c("Atlantic mackerel - Gulf of Maine / Cape Hatteras",
"Tilefish - Mid-Atlantic Coast" ,
"Yellowtail flounder - Southern New England / Mid-Atlantic",
"Winter flounder - Southern New England / Mid-Atlantic" ,
"Summer flounder - Mid-Atlantic Coast" ,
"Scup - Atlantic Coast",
"Bluefish - Atlantic Coast",
"Black sea bass - Mid-Atlantic Coast",
"Butterfish - Gulf of Maine / Cape Hatteras"
))
midstocks <- plot_stackbarcpts_single(YEAR = bar_dat$Time,
var2bar = bar_dat$Var,
x = bar_dat$Value,
titl = "Mid-Atlantic stocks",
xlab = "",
ylab = "Mature biomass (anomaly)",
height = 5.5,
width = 9,
filt = FALSE,
label = "",
y.text = 10,
aggregate = TRUE,
intplot = TRUE,
remove_leg = TRUE)
#all
ggiraph(code = print(midstocks), pointsize = 14, width_svg = 8, height_svg = 6)