| Plots {SpaDES.core} | R Documentation |
Plot wrapper intended for use in a SpaDES module
Description
This is a single function call that allows a user to change which format in which
the plots will occur.
Specifically, the two common formats would be to "screen" or to disk as an image file,
such as "png".
This has currently been tested with ggplot2, RasterLayer, and tmap objects.
The default (or change with e.g., fn = "print", usePlot = FALSE) uses
Plot internally, so individual plots may be rearranged. When saved to
disk (e.g., via type = 'png'), then Plot will not be used and the single object
that is the result of this Plots call will be saved to disk.
This function requires at least 2 things: a plotting function and arguments passed
to that function (which could include data, but commonly would simply be named
arguments required by fn).
See below and examples.
Usage
Plots(
data,
fn,
filename,
types = quote(params(sim)[[currentModule(sim)]]$.plots),
path = quote(figurePath(sim)),
.plotInitialTime = quote(params(sim)[[currentModule(sim)]]$.plotInitialTime),
ggsaveArgs = list(),
usePlot = getOption("spades.PlotsUsePlot", FALSE),
deviceArgs = list(),
...
)
Arguments
data |
An (optional) arbitrary data object. If supplied, it will be passed as
the first argument to |
fn |
An arbitrary plotting function. If not provided, defaults to using |
filename |
A name that will be the base for the files that will be saved, i.e,
do not supply the file extension, as this will be determined based on |
types |
Character vector, zero or more of types. If used within a module, this
will be deduced from the |
path |
Currently a single path for the saved objects on disk. If |
.plotInitialTime |
A numeric. If |
ggsaveArgs |
An optional list of arguments passed to |
usePlot |
Logical. If |
deviceArgs |
An optional list of arguments passed to one of |
... |
Anything needed by |
Details
-
type-
"screen"– Will plot to the current device, normally a plot window -
"object"– Will save the plot object, e.g.,ggplotobject -
"raw"– Will save the raw data prior to plotting, e.g., the data argument -
"png"– or any other type save-able withggsave
-
Value
Called for its side effect of plot creation.
Recording of files saved
In cases where files are saved, and where Plots is used within a SpaDES module,
the file(s) that is/are saved will be appended to the outputs slot of the
simList of the module. This will, therefore, keep a record of figures saved
within the simList
Note
This is still experimental and could change in the next release.
Plots now has experimental support for "just a Plot call", but with types specified.
See examples.
The devices to save on disk will have some different behaviours to the screen representation,
since "wiping" an individual plot on a device doesn't exist for a file device.
This offers up to 4 different actions for a given plot:
To screen device
To disk as raw data (limited testing)
To disk as a saved plot object (limited testing)
To disk as a ‘.png’ or other image file, e.g., ‘.pdf’
To turn off plotting both to screen and disk, set both
.plotInititalTime = NA and .plots = NA or any other
value that will not trigger a TRUE with a grepl with the types
argument (e.g., "" will omit all saving).
Examples
# Note: if this is used inside a SpaDES module, do not define this
# function inside another function. Put it outside in a normal
# module script. Otherwise, it will cause a memory leak.
if (requireNamespace("ggplot2")) {
fn <- function(d)
ggplot2::ggplot(d, ggplot2::aes(a)) +
ggplot2::geom_histogram()
sim <- simInit()
sim$something <- data.frame(a = sample(1:10, replace = TRUE))
Plots(data = sim$something, fn = fn,
types = c("png"),
path = file.path("figures"),
filename = tempfile(),
.plotInitialTime = 1
)
# plot to active device and to png
Plots(data = sim$something, fn = fn,
types = c("png", "screen"),
path = file.path("figures"),
filename = tempfile(),
.plotInitialTime = 1
)
# Can also be used like quickPlot::Plot, but with control over output type
r <- terra::rast(terra::ext(0,10,0,10), vals = sample(1:3, size = 100, replace = TRUE))
Plots(r, types = c("screen", "png"), deviceArgs = list(width = 700, height = 500),
usePlot = TRUE)
# with ggplotify, Plots can also be used to plot/save
# non-ggplot objects:
if (require("ggplotify")) {
if (!require("lattice")) stop("please install lattice")
plotFile <- tempfile()
p1 <- densityplot(~mpg|cyl, data=mtcars)
Plots(data = p1, fn = as.ggplot, filename = plotFile,
ggsaveArgs = list(width = 5, height = 4, dpi = 300, bg = "white", units = "in"),
types = c("screen", "png"), .plotInitialTime = 1)
}
} # end ggplot
# end of dontrun