當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。