% 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}
