当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R dev2 在多个设备之间复制图形


R语言 dev2 位于 grDevices 包(package)。

说明

dev.copy 将当前设备的图形内容复制到which 指定的设备或device 指定的函数创建的新设备中。 (同时指定 whichdevice 是错误的)。 (如果当前设备上的记录关闭,则没有要复制的内容:这将导致没有绘图或空绘图。)复制到的设备将成为当前设备。

dev.print将当前设备的图形内容复制到device指定的函数创建的新设备中,然后关闭新设备。

dev.copy2epsdev.print 类似,但会生成纵向 EPSF 输出文件 ( horizontal = FALSE )。 dev.copy2pdf 是 PDF 输出的模拟。

dev.control 允许用户控制设备中图形操作的记录。如果 displaylist"inhibit" ( "enable" ),则记录将关闭(打开)。只有在绘图开始时(新页面之前或之后)更改此设置才是安全的。最初记录对于屏幕设备是打开的,对于打印设备是关闭的。

用法

dev.copy(device, ..., which = dev.next())
dev.print(device = postscript, ...)
dev.copy2eps(...)
dev.copy2pdf(..., out.type = "pdf")
dev.control(displaylist = c("inhibit", "enable"))

参数

device

设备函数(例如,x11postscript、...)

...

上述 device 函数的参数:对于 dev.copy2eps 参数, postscriptdev.copy2pdf 参数, pdf 。对于 dev.print ,这包括 which 和默认情况下的任何 postscript 参数。

which

指定要复制到的设备的设备号。

out.type

输出设备的名称:可以是 "pdf""quartz" (某些 macOS 版本)或 "cairo" (Windows 和某些 Unix 类似版本,请参阅 cairo_pdf )。

displaylist

字符串:唯一有效值为 "inhibit""enable"

细节

请注意,这些函数复制设备区域而不是绘图:设备表面的背景颜色是复制内容的一部分。大多数屏幕设备默认为透明背景,这可能不是复制到 png 等设备时所需要的。

对于dev.copy2epsdev.copy2pdf,除非另有说明,widthheight均取自当前设备。如果仅指定 widthheight 之一,则调整另一个以保留正在复制的设备的宽高比。默认文件名是 Rplot.epsRplot.pdf ,可以通过指定 file 参数覆盖。

复制到设备,例如postscriptpdf需要预先指定字体系列的需要额外小心 -R不知道情节中使用了哪些家庭,因此他们需要由fonts作为一部分传递的论点...。同样,如果要复制的设备是用family论证,合适的family参数需要包含在....

dev.print 的默认设置是生成并打印 postscript 副本。除非 options("printcmd") 设置适当并且您有 PostScript 打印系统,否则此函数不会起作用:请参阅 postscript 了解如何设置。 Windows 用户可能更喜欢使用 dev.print(win.print)

当满足以下条件时,dev.print 对于生成 postscript 打印(默认)最有用。除非指定 file,否则将打印该图。除非指定 widthheightpointsize ,否则绘图尺寸将从当前设备中获取,必要时缩小以适合纸张。 (如果绘图缩小,pointsize 将重新缩放。)如果未指定 horizontal,并且可以通过切换其值以完整尺寸打印绘图,则执行此操作而不是缩小绘图区域。

如果 dev.print 与指定的 device (甚至 postscript )一起使用,则它以与 dev.copy2eps 相同的方式设置宽度和高度。除非设备指定以英寸为单位的尺寸,否则这是不合适的,特别是不适用于 pngjpegtiffbmp ,除非指定了 units = "inches"

dev.copy 返回已复制到的设备的名称和编号。

dev.printdev.copy2epsdev.copy2pdf 返回从中复制的设备的名称和编号。

注意

大多数设备(包括所有屏幕设备)都有一个显示列表,记录设备中发生的所有图形操作。 dev.copy 通过将显示列表从一个设备复制到另一个设备来复制图形内容。此外,调整设备大小后图形内容的自动重绘取决于显示列表的内容。

命令dev.control("inhibit")之后,图形操作不会记录在显示列表中,因此dev.copydev.print不会复制任何内容,并且如果设备大小调整,设备的内容也不会自动重绘。

就内存而言,记录图形操作相对昂贵,因此如果内存使用存在问题,命令 dev.control("inhibit") 可能会很有用。

例子

## Not run: 
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()

## End(Not run)

也可以看看

dev.cur 和其他dev.xxx 函数。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Copy Graphics Between Multiple Devices。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。