This vignette gives further detail on how to use the functions in biogrowth to prepare publication ready figures. For details on how to use the base functions of the package, please check the vignettes for model fitting and growth predictions.
The functions in biogrowth use cowplot::theme_cowplot
as default, that has a nice clean theme and could be used in a publication as is. However, more control over formatting options can be needed in order to standardize plots or when preparing figures for a specific journal.
Moreover, every plot is based on ggplot2, and therefore the plots can be manipulated in the same way. In order to ease manipulation, plotting methods in biogrowth include arguments to control the aesthetics that would often would within the “geom_” definition (such as colour
, size
or linetype
).
As an illustration for this, we will use a growth model fitted to data under dynamic environmental conditions.
data("example_dynamic_growth")
data("example_env_conditions")
sec_models <- list(temperature = "CPM", aw = "CPM")
known_pars <- list(Nmax = 1e4, # Primary model
N0 = 1e0, Q0 = 1e-3, # Initial values of the primary model
mu_opt = 4, # mu_opt of the gamma model
temperature_n = 1, # Secondary model for temperature
aw_xmax = 1, aw_xmin = .9, aw_n = 1 # Secondary model for water activity
)
my_start <- list(temperature_xmin = 25, temperature_xopt = 35,
temperature_xmax = 40, aw_xopt = .95)
my_model <- fit_growth(example_dynamic_growth,
sec_models,
my_start, known_pars,
environment = "dynamic",
env_conditions = example_env_conditions
)
By default, the S3 plot()
methods use the cowplot::theme_cowplot
As mentioned, the plot methods include a large list of additional arguments that can be used to edit the aesthetics of the plot. A whole list of arguments is available from the class documentation (e.g. accessible by typing ?GrowthFit
in the console). In the case of plot.GrowthFit()
, the plot method includes the following arguments:
add_factor
line_col
line_size
line_type
point_col
point_size
point_shape
ylims
label_y1
label_y2
label_x
line_col2
line_size2
line_type2
This provides plenty of options to edit the aesthetics of the plot. For instance:
plot(my_model,
line_col = "red",
line_size = 1,
line_type = "dashed",
label_y1 = "Population size (log-millions)",
label_x = "Time (years)",
point_size = 3,
point_shape = 1,
point_col = "darkgrey")
Note that the plot function returns an instance of ggplot
. This allows further editing of the plot using layers with the functions included in ggplot2. This provides plenty of options to edit the plot
plot(my_model,
line_col = "red",
line_size = 1,
line_type = "dashed",
label_y1 = "Population size (log-millions)",
label_x = "Time (years)",
point_size = 3,
point_shape = 1,
point_col = "darkgrey") +
theme_gray() +
theme(axis.title = element_text(colour = "green", size = 14))
In some cases, the automatic scaling that ggplot2 uses might not be optimal. We can use the coord_cartesian() function to change the limits of the x- and y-axis
The plot_grid()
function from cowplot provides a convenient way to combine different plots into a grid. For instance,
ggsave()
will automatically save the last plot to a specified location. It needs a filename as a string, for instance “static_prediction.pdf” to save the figure as a pdf. It also needs a location to save to (defaults to the working directory), and optionally the user can set dimentions and units.
The classes GrowthFit
, GrowthPrediction
and GlobalGrowthFit
are a subclass of list
. This provides simple access to several attributes of the model. For instance, the the entry best_prediction
of an instance of GrowthFit
includes an instance of GrowthPrediction
with the fitted model.
my_model$best_prediction
#> Growth prediction under dynamic environmental conditions
#>
#> Environmental factors included: temperature, aw
#>
#> Parameters of the Baranyi primary model:
#> mu_opt Nmax N0 Q0
#> 4e+00 1e+04 1e+00 1e-03
#>
#> Parameter mu defined in log-10 scale
#>
#> Population size defined in log-10 scale
#>
#> Secondary model for temperature:
#> xmin xopt xmax n
#> "26.6667032815958" "38.8653415561503" "70.3684359647904" "1"
#> model
#> "CPM"
#>
#> Secondary model for aw:
#> xmin xopt xmax n
#> "0.9" "0.985185030452571" "1" "1"
#> model
#> "CPM"
In a similar way, the simulation
entry of this instance includes a tibble with the model simulation
head(my_model$best_prediction$simulation)
#> # A tibble: 6 × 4
#> time Q N logN
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0 0.001 1 0
#> 2 0.152 0.001 1 0
#> 3 0.303 0.001 1 0
#> 4 0.455 0.001 1 0
#> 5 0.606 0.001 1 0
#> 6 0.758 0.001 1 0
This allows making plots directly using this data using ggplot2 (or similar packages)