#' Plot mean weight data and fits.
#'
#' Plot mean weight data and fits from Stock Synthesis output. Intervals are
#' based on T-distributions as specified in model.
#'
#'
#' @template replist
#' @param ymax Optional input to override default ymax value.
#' @param subplots Vector of which plots to make (1 = data only, 2 = with fit).
#' If `plotdat = FALSE` then subplot 1 is not created, regardless of
#' choice of `subplots`.
#' @template plot
#' @template print
#' @template plotdir
#' @template fleets
#' @template fleetnames
#' @param datplot Make data-only plot of discards? This can override the choice
#' of `subplots`.
#' @template labels
#' @param col1 first color to use in plot (for expected values)
#' @param col2 second color to use in plot (for observations and intervals)
#' @template pwidth
#' @template pheight
#' @template punits
#' @template res
#' @template ptsize
#' @template cex.main
#' @template verbose
#' @author Ian Taylor, Ian Stewart
#' @export
#' @seealso [SS_plots()], [SS_output()]
SSplotMnwt <-
function(replist, subplots = 1:2, ymax = NULL,
plot = TRUE, print = FALSE,
fleets = "all",
fleetnames = "default",
datplot = FALSE,
labels = c(
"Year", # 1
"discard", # 2
"retained catch", # 3
"whole catch", # 4
"Mean individual body weight (kg)", # 5
"Mean weight in", # 6
"for"
), # 7
col1 = "blue", col2 = "black",
pwidth = 6.5, pheight = 5.0, punits = "in", res = 300, ptsize = 10,
cex.main = 1,
plotdir = "default", verbose = TRUE) {
# table to store information on each plot
plotinfo <- NULL
# get stuff from replist
mnwgt <- replist[["mnwgt"]]
FleetNames <- replist[["FleetNames"]]
DF_mnwgt <- replist[["DF_mnwgt"]]
nfleets <- replist[["nfleets"]]
SS_versionshort <- replist[["SS_versionshort"]]
if (fleets[1] == "all") fleets <- 1:nfleets
if (fleetnames[1] == "default") fleetnames <- FleetNames
if (plotdir == "default") plotdir <- replist[["inputs"]][["dir"]]
# mean body weight observations ###
if (!is.na(mnwgt)[[1]][1]) {
for (ifleet in intersect(fleets, unique(mnwgt[["Fleet"]]))) {
# usemnwgt is subset of mnwgt for the particular fleet
usemnwgt <- mnwgt[mnwgt[["Fleet"]] == ifleet & mnwgt[["Obs"]] > 0, ]
if (SS_versionshort == "3.30") {
usemnwgt[["Part"]] <- usemnwgt[["Part"]]
} else {
usemnwgt[["Part"]] <- usemnwgt[["Mkt"]]
}
FleetName <- fleetnames[ifleet]
for (j in unique(usemnwgt[["Part"]])) {
yr <- usemnwgt[["Yr"]][usemnwgt[["Part"]] == j]
ob <- usemnwgt[["Obs"]][usemnwgt[["Part"]] == j]
cv <- usemnwgt[["CV"]][usemnwgt[["Part"]] == j]
ex <- usemnwgt[["Exp"]][usemnwgt[["Part"]] == j]
xmin <- min(yr) - 3
xmax <- max(yr) + 3
liw <- -ob * cv * qt(0.025, DF_mnwgt) # quantile of t-distribution
uiw <- ob * cv * qt(0.975, DF_mnwgt) # quantile of t-distribution
liw[(ob - liw) < 0] <- ob[(ob - liw) < 0] # no negative limits
titlepart <- labels[2]
if (j == 2) titlepart <- labels[3]
if (j == 0) titlepart <- labels[4]
ptitle <- paste(labels[6], titlepart, labels[7], FleetName, sep = " ")
ylab <- labels[5]
# wrap up plot command in function
bdywtfunc <- function(addfit) {
plotCI(
x = yr, y = ob, uiw = uiw, liw = liw, xlab = labels[1], main = ptitle,
ylo = 0, col = col2, sfrac = 0.005, ylab = ylab, lty = 1, pch = 21, bg = "white",
xlim = c(xmin, xmax), cex.main = cex.main, ymax = ymax
)
abline(h = 0, col = "grey")
if (addfit) points(yr, ex, col = col1, cex = 2, pch = "-")
}
# make plots
if (!datplot) {
subplots <- setdiff(subplots, 1) # don't do subplot 1 if datplot=FALSE
}
for (isubplot in subplots) { # loop over subplots (data only or with fit)
if (isubplot == 1) {
addfit <- FALSE
} else {
addfit <- TRUE
}
if (plot) {
bdywtfunc(addfit = addfit)
}
if (print) {
if (!addfit) {
file <- paste0("bodywt_data_flt", FleetName, ".png")
} else {
file <- paste0("bodywt_fit_flt", FleetName, ".png")
}
caption <- ptitle
plotinfo <- save_png(
plotinfo = plotinfo, file = file, plotdir = plotdir, pwidth = pwidth,
pheight = pheight, punits = punits, res = res, ptsize = ptsize,
caption = caption
)
bdywtfunc(addfit = addfit)
dev.off()
}
} # end loop over subplots
} # end loop over market categories
} # end loop over fleets
}
if (!is.null(plotinfo)) plotinfo[["category"]] <- "Mnwt"
return(invisible(plotinfo))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.