blob: e2263b41cad839961ebd7492e405d37ac348a1df [file] [log] [blame]
% File src/library/grDevices/man/recordplot.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2013 R Core Team
% Distributed under GPL 2 or later
\name{recordPlot}
\alias{replayPlot}
\alias{recordPlot}
\alias{print.recordedplot}
\title{Record and Replay Plots}
\description{
Functions to save the current plot in an \R variable, and to replay it.
}
\usage{
recordPlot(load=NULL, attach=NULL)
replayPlot(x, reloadPkgs=FALSE)
}
\arguments{
\item{load}{If not \code{NULL}, a character vector of package names,
which are saved as part of the recorded plot.}
\item{attach}{If not \code{NULL}, a character vector of package names,
which are saved as part of the recorded plot.}
\item{x}{A saved plot.}
\item{reloadPkgs}{A logical indicating whether to reload and/or
reattach any packages that were saved as part of the recorded plot.}
}
\details{
These functions record and replay the displaylist of the current
graphics device. The returned object is of class
\code{"recordedplot"}, and \code{replayPlot} acts as a \code{print}
method for that class.
The returned object is stored as a pairlist, but the usual methods for
examining \R objects such as \code{\link{deparse}} and
\code{\link{str}} are liable to mislead.
}
\section{Warning}{
The format of recorded plots may change between \R versions, so
recorded plots should \strong{not} be used as a permanent
storage format for \R plots.
As of \R 3.3.0, it is possible (again)
to replay a plot from another \R session using, for example,
\code{\link{saveRDS}} and \code{\link{readRDS}}.
It is even possible to replay a plot from another \R version,
however, this will produce warnings, may produce errors,
or something worse.
}
\section{Note}{
Replay of a recorded plot may not produce the correct result
(or may just fail) if the display list contains a call to
\code{\link{recordGraphics}} which in turn contains an expression
that calls code from a non-base package other than \pkg{graphics}
or \pkg{grid}. The most well-known example of this is a plot
drawn with the package \CRANpkg{ggplot2}. One solution is to load
the relevant package(s) before replaying the recorded plot.
The \code{load} and \code{attach} arguments to \code{recordPlot}
can be used to automate this - any packages named in \code{load}
will be reloaded, via \code{\link{loadNamespace}}, and any packages
named in \code{attach} will be reattached, via \code{\link{library}},
as long as \code{reloadPkgs} is \code{TRUE} in the call to
\code{replayPlot}. This is only relevant when attempting to
replay in one R session a plot that was recorded in a different R session.
}
\value{
\code{recordPlot} returns an object of class \code{"recordedplot"}.
\code{replayPlot} has no return value.
}
\seealso{
The displaylist can be turned on and off using \code{\link{dev.control}}.
Initially recording is on for screen devices, and off for print devices.
}
\keyword{iplot}