Copy Graphics Between Multiple Devices
dev.copy copies the graphics contents of the current device
to the device specified by
which or to a new device which has
been created by the function specified by
device (it is an
error to specify both
device). (If recording
is off on the current device, there are no contents to copy: this will
result in no plot or an empty plot.)
The device copied to becomes the current device.
dev.print copies the graphics contents of the current device
to a new device which has been created by the function specified by
device and then shuts the new device.
dev.copy2eps is similar to
dev.print but produces an
EPSF output file in portrait orientation (
horizontal = FALSE).
dev.copy2pdf is the analogue for PDF output.
dev.control allows the user to control the recording of
graphics operations in a device. If
"enable") then recording is turned off (on). It is only safe
to change this at the beginning of a plot (just before or just after a
new page). Initially recording is on for screen devices, and off for
dev.copy(device, …, which = dev.next()) dev.print(device = postscript, …) dev.copy2eps(…) dev.copy2pdf(…, out.type = "pdf") dev.control(displaylist = c("inhibit", "enable"))
A device function (e.g.,
A device number specifying the device to copy to.
The name of the output device: can be
"quartz"(some macOS builds) or
"cairo"(Windows and some Unix-alikes, see
A character string: the only valid values are
Note that these functions copy the device region and not a
plot: the background colour of the device surface is part of what is
copied. Most screen devices default to a transparent background, which
is probably not what is needed when copying to a device such as
height are taken from the current device unless otherwise
specified. If just one of
specified, the other is adjusted to preserve the aspect ratio of the
device being copied. The default file name is
Rplot.pdf, and can be overridden by specifying a
Copying to devices such as
passed as part of
…. Similarly, if the device to be copied
from was opened with a
family argument, a suitable
family argument will need to be included in
The default for
dev.print is to produce and print a postscript
copy. This will not work unless
set suitably and you have a PostScript printing system: see
postscript for how to set this up. Windows users may
prefer to use
dev.print is most useful for producing a postscript print
(its default) when the following applies. Unless
file is specified, the plot will be printed. Unless
pointsize are specified
the plot dimensions will be taken from the current device, shrunk
if necessary to fit on the paper. (
pointsize is rescaled if the
plot is shrunk.) If
horizontal is not specified and the plot
can be printed at full size by switching its value this is done
instead of shrinking the plot region.
dev.print is used with a specified
postscript) it sets the width and height in the same way as
dev.copy2eps. This will not be appropriate unless the device
specifies dimensions in inches, in particular not for
units = "inches" is specified.
dev.copy returns the name and number of the device which has
been copied to.
the name and number of the device which has been copied from.
Most devices (including all screen devices) have a display list
which records all of the graphics operations that occur in the device.
dev.copy copies graphics contents by copying the display list
from one device to another device. Also, automatic redrawing of
graphics contents following the resizing of a device depends on the
contents of the display list.
After the command
dev.control("inhibit"), graphics operations
are not recorded in the display list so that
dev.print will not copy anything and the contents of a device
will not be redrawn automatically if the device is resized.
The recording of graphics operations is relatively expensive in
terms of memory so the command
dev.control("inhibit") can be
useful if memory usage is an issue.
dev.cur and other
x11() # on a Unix-alike plot(rnorm(10), main = "Plot 1") dev.copy(device = x11) mtext("Copy 1", 3) dev.print(width = 6, height = 6, horizontal = FALSE) # prints it dev.off(dev.prev()) dev.off()