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


R postscript PostScript 圖形


R語言 postscript 位於 grDevices 包(package)。

說明

postscript 啟動圖形設備驅動程序以生成PostScript 圖形。

用法

postscript(file = if(onefile) "Rplots.ps" else "Rplot%03d.ps",
           onefile, family, title, fonts, encoding, bg, fg,
           width, height, horizontal, pointsize,
           paper, pagecentre, print.it, command,
           colormodel, useKerning, fillOddEven)

參數

file

給出文件路徑的字符串。如果是 "" ,則輸出將通過管道傳輸到參數 command 給出的命令。如果它的形式為 "|cmd" ,則輸出將通過管道傳輸到 cmd 給出的命令。

要與 onefile = FALSE 一起使用,請提供 printf 格式,例如 "Rplot%03d.ps"(這種情況下的默認格式)。否則,該字符串不應包含 % :如果確實有必要,請在字符串中使用 %% 作為文件名中的 %。允許與 regular expression "%[#0 +=-]*[0-9.]*[diouxX]" 匹配的單個整數格式。

波形符擴展(參見path.expand)已完成。帶有標記編碼的輸入將轉換為本機編碼,否則會給出錯誤。

onefile

邏輯:如果為 true(默認值),則允許一個文件中包含多個數字。如果為 false,則生成包含每頁頁碼的文件名,並使用 EPSF 標頭且不使用 DocumentMedia 注釋。默認為 TRUE

family

要使用的初始字體係列,通常作為字符串。請參閱“家庭”部分。默認為 "Helvetica"

title

要作為 Title 注釋嵌入到文件中的標題字符串。默認為 "R Graphics Output"

fonts

指定附加的字符向量R字體係列的圖形字體係列名稱,其聲明將包含在 PostScript 文件中,並且可與設備一起使用。請參閱下麵的“家庭”。默認為NULL.

encoding

編碼文件的名稱。默認為 "default" 。後者被解釋為

在 Unix 類係統上

作為 '"ISOLatin1.enc"’除非區域設置被識別為對應於使用 ISO 8859-{2,5,7,13,15} 或 KOI8-{R,U} 的語言。

在 Windows 上

作為 '"CP1250.enc"’(中歐),"CP1251.enc"(西裏爾),"CP1253.enc"(希臘語)或"CP1257.enc"(波羅的海)如果這些代碼頁之一正在使用,否則‘"WinAnsi.enc"’(代碼頁 1252)。

該文件在‘編碼’ 包的目錄grDevices如果路徑不包含路徑分隔符。一個擴展".enc"可以省略。

bg

要使用的初始背景顏色。如果"transparent"(或任何其他非不透明顏色),則不繪製背景。默認為 "transparent"

fg

要使用的初始前景色。默認為 "black"

width , height

圖形區域的寬度和高度(以英寸為單位)。默認為 0

如果paper != "special"widthheight 小於0.1 或太大而無法提供0.5 英寸的總邊距,則圖形區域將重置為相應的紙張尺寸減去0.5。

horizontal

打印圖像的方向是合乎邏輯的。默認為 true,即寬度小於高度的紙張尺寸的橫向。

pointsize

要使用的默認磅值。嚴格來說,以 bp 為單位,即 1/72 英寸,但大約以磅為單位。默認為 12

paper

打印機中紙張的尺寸。選項是 "a4""letter" (或 "us" )、 "legal""executive" (並且這些可以大寫)。另外,當參數 widthheight 指定紙張尺寸時,可以使用 "special"。進一步的選擇是 "default"(默認值):如果選擇此選項,則紙張尺寸將從選項 "papersize" 中獲取(如果已設置),如果未設置或為空,則從 "a4" 中獲取。

pagecentre

邏輯:設備區域應該位於頁麵中央嗎?默認為 true。

print.it

邏輯:設備關閉時是否應該打印文件? (這僅適用於 file 是真實文件名的情況。)默認為 false。

command

用於‘printing’的命令。默認為 "default" ,即選項 "printcmd" 的值。長度限製為 2*PATH_MAX ,在 Unix 上通常為 8096 字節,在 Windows 上為 520 字節。最新的 Windows 係統可能配置為使用長路徑,目前將此限製提高到 10000。

colormodel

說明顏色模型的字符串:當前允許的值為 "srgb""srgb+gray""rgb""rgb-nogray""gray" (或 "grey" )和 "cmyk" 。默認為 "srgb" 。請參閱“顏色模型”部分。

useKerning

合乎邏輯的。設置文本和計算字符串寬度時是否應該包含字距調整?默認為 TRUE

fillOddEven

邏輯控製多邊形填充模式:有關詳細信息,請參閱polygon。默認FALSE

細節

file 之外的所有參數均默認為 ps.options() 給出的值。最終默認值在參數部分引用。

postscript 打開文件file,繪製任何請求的圖形所需的PostScript 命令將寫入該文件。然後可以在合適的設備上打印該文件以獲得硬拷貝。

file參數被解釋為 C 整數格式,如所使用的sprintf,帶有整數參數的頁碼。默認給出文件‘Rplot001.ps”,...,“Rplot999.ps', 'Rplot1000.ps’,……

為單曲製作的後記R情節是 EPS (封裝PostScript) 兼容,並且可以包含到其他文檔中,例如,包含到 LaTeX 中,使用\includegraphics{<filename>}。為了以這種方式使用,您可能需要使用setEPS()將默認值設置為horizontal = FALSE, onefile = FALSE, paper = "special"。請注意,邊界框用於設備區域:如果您發現繪圖區域周圍的空白過多,請通過以下方式減少圖形區域的邊距par(mar = ).

使用的大部分 PostScript 序言取自R字符向量.ps.prolog。這在輸出中進行了標記,並且可以通過更改該向量來更改。 (這僅建議PostScript專家:標準版本位於namespace:grDevices.)

PostScript 器件有一個默認係列,用戶可以通過以下方式設置family。如果在繪製到 PostScript 設備時要使用其他字體係列,則必須在創建設備時聲明這些字體係列fonts;該參數的字體係列名稱是R圖形字體係列名稱(請參閱文檔postscriptFonts)。

par(lwd = ) 控製的線寬為 1/96 英寸的倍數:允許小於 1 的倍數。 pch = "."cex = 1 對應於邊長為 1/72 英寸的正方形,這也是 "cra" 等圖形參數假定的 ‘pixel’ 尺寸。

當背景顏色完全透明(初始默認值)時,生成的PostScript不會繪製背景。幾乎所有PostScript觀看者都會使用白色畫布,因此視覺效果就像背景是白色的一樣。但在彩色紙上打印時,情況並非如此。

家庭

字體係列是涵蓋由圖形參數 par(font = ) 或網格參數 gpar(fontface = ) 選擇的五個字體(通常為普通、粗體、斜體、bold-italic 和符號)的字體集合。字體係列可以通過 family 參數指定為設備的初始/默認字體係列,也可以在設備打開後通過圖形參數 par(family = ) 或網格參數 gpar(fontfamily = ) 指定。打開設備時,必須在 fonts 參數中指定除初始係列之外將使用的係列。

字體係列是通過調用 postscriptFonts 聲明的。

參數 family 指定要使用的初始/默認字體係列。在正常使用中,它是 "AvantGarde""Bookman""Courier""Helvetica""Helvetica-Narrow""NewCenturySchoolbook""Palatino""Times" 之一,並指標準 Adobe PostScript字體係列所有常見 PostScript 設備中包含(或克隆)的名稱。

許多 PostScript 模擬器(包括基於 ghostscript 的模擬器)使用這些字體的 URW 等效項,即 "URWGothic""URWBookman""NimbusMon""NimbusSan""NimbusSanCond""CenturySch""URWPalladio""NimbusRom" 。如果您的 PostScript 設備使用 URW 字體,您將通過使用這些名稱來訪問更多字符和更合適的指標。為了使這些更容易記住,還支持"URWHelvetica" == "NimbusSan""URWTimes" == "NimbusRom"

另一種類型的家族使用東亞語言的 CID-keyed 字體 - 請參閱 postscriptFonts

family參數通常是命名字體係列的字符串,但是由Type1FontCIDFont也被接受。為了與早期版本兼容R,初始族也可以指定為四個或五個 afm 文件的向量。

注意R不嵌入 PostScript 輸出中使用的字體:請參閱embedFonts尋求實用程序來幫助做到這一點。

查看器和嵌入應用程序經常用字體替換係列中指定的字體,並且替換的字體規格通常會略有不同。 useKerning = TRUE 使用目標係列的字距調整來分隔字符串中的字母:這可能看起來比 useKerning = FALSE 更難看。

編碼

編碼說明了使用哪些字形來顯示字符代碼(範圍為 0-255)。最常見的R使用 ISOLatin1 編碼,示例為text都在該編碼中。但是,運行的機器上使用的編碼R可能會有所不同,並且通過使用encoding參數字形可以與使用的編碼相匹配。這對於歐洲和西裏爾語言來說已經足夠了,但對於東亞語言來說就不夠了。對於後者,使用複合 CID 字體。這些字體對於其他語言很有用:例如它們可能包含希臘字形。 (本節的其餘部分僅適用於不使用 CID 字體的情況。)

如果僅使用 ASCII 字符(代碼 32-126)作為所有編碼(除了"TeXtext")同意該範圍。有些編碼也是 ISOLatin1 的超集。但是,如果重音字符和特殊字符未按您的預期顯示,您可能需要更改編碼。提供了一些其他編碼R"WinAnsi.enc""MacRoman.enc"對應於 Windows 和經典 Mac OS 上通常使用的編碼(至少 Adobe),並且"PDFDoc.enc"是 Unicode 編碼(PDF 標準)的前 256 個字符。還有編碼"ISOLatin2.enc","CP1250.enc","ISOLatin7.enc"(ISO 8859-13),"CP1257.enc", 和"ISOLatin9.enc"(ISO 8859-15),"Cyrillic.enc"(ISO 8859-5),"KOI8-R.enc","KOI8-U.enc","CP1251.enc","Greek.enc"(ISO 8859-7)和"CP1253.enc"。請注意,這些編碼中的許多字形不屬於與標準係列相對應的字體。 (除了 Courier、Helvetica 和 Times 之外,Adobe 的字體隻涵蓋 Latin-1,而 URW 的字體還涵蓋 Latin-2、Latin-7、Latin-9 和西裏爾字母,但不包含希臘語。Adobe 的例外情況涵蓋拉丁字符套,但不是歐元。)

如果您指定編碼,您有責任確保 PostScript 字體包含所使用的字形。這裏的一個問題是歐元符號,它位於 WinAnsi 和 MacRoman 編碼中,但很可能不在 PostScript 字體中。 (它位於 URW 變體中;它不在提供的 Adobe Font Metric 文件中。)

有一個例外。字符 45 ( "-" ) 始終設置為負號(其在 Adobe ISOLatin1 中的值),即使它在其他編碼中是連字符。在所有拉丁語編碼、西裏爾語和希臘語中,連字符可用作字符 173(八進製 0255)。 (這可以在 UTF-8 語言環境中輸入為 "\uad"。)字形 39 和 96 的帳戶存在一些差異:提供的編碼(CP1250 和 CP1251 除外)將它們視為 ‘quoteright’ 和 ‘quoteleft’(而不是分別高於 ‘quotesingle’/‘acute’ 和 ‘grave’),如 Adobe 文檔中所示。

TeX字體

TeX 傳統上使用 Computer Modern 等字體,這些字體的編碼方式相當不同,采用 7 位編碼。此編碼可以由 encoding = "TeXtext.enc" 指定,注意 ASCII 字符 < > \ _ { } 在這些字體中不可用。

提供的係列 "ComputerModern""ComputerModernItalic" 使用此編碼,並且僅支持 postscript (而不是 pdf )。它們旨在與 TeX CM 字體的 Type 1 版本一起使用。通常可以將此類輸出包含在 TeX 或 LaTeX 中,前提是它是使用 dvips -Ppfb -j0 或係統上的等效項進行處理的。 (-j0 關閉字體子集設置。)使用family = "ComputerModern" 時,使用的斜體/bold-italic 字體是傾斜字體(cmsl10cmbxsl10)。要改用文本斜體字體,請設置 family = "ComputerModernItalic"

這些係列使用 TeX 數學斜體和符號字體來全麵但不完整地覆蓋其他係列中 Adobe 符號字體所涵蓋的字形。這是通過 special-casing 從提供的‘生成的 postscript 代碼來實現的CM_symbol_10.afm’。

顏色型號

默認顏色模型 ("srgb") 是 sRGB。

替代方案 "srgb+gray" 使用 sRGB 作為顏色,但使用表示為灰度的純灰色(包括黑色和白色)(這會導致文件更小,並且對於某些打印機驅動程序來說可能是有利的)。相反,它的文件在某些查看器上渲染速度可能會慢得多,並且涉及灰色或白色的顏色漸變可能會出現明顯的不連續性。

其他可能性是僅使用灰度(並將其他顏色轉換為亮度)的 "gray" (或 "grey" )和 "cmyk" 。使用從 sRGB 到 CMYK 的最簡單的轉換 (https://en.wikipedia.org/wiki/CMYK_color_model#Mapping_RGB_to_CMYK),並且光柵圖像以 RGB 輸出。

為向後兼容提供的顏色模型是"rgb"(即RGB+灰度)和"rgb-nogray"它使用未校準的 RGB(如R2.13.0 之前)。這些會導致文件稍小,渲染速度可能會更快,但確實依賴於正確校準的查看器。

打印

可以通過 postscript 以兩種方式打印後記圖。

  1. 設置print.it = TRUE 會導致在設備關閉時使用參數"file" 調用參數command 中給出的命令。請注意,繪圖文件不會被刪除,除非 command 安排刪除它。

  2. file = ""或者file = "|cmd"可用於使用管道進行打印。打開命令失敗可能會報告給終端,但不會報告給終端R,在這種情況下通過關閉設備dev.off立即地。

在 Windows 上默認"printcmd"為空,如果print.it = TRUE用來。將 PostScript 文件假脫機到打印機的合適命令可以在‘RedMon’ 套房可從http://pages.cs.wisc.edu/~ghost/index.html。該命令將在最小化窗口中運行。 GSView 4.x 提供‘gsprint.exe’這可能更方便(它需要 Ghostscript 版本 6.50 或更高版本)。

慣例

本節介紹“R Internals”手冊中規定的圖形設備約定的實現。

  • 默認設備尺寸為 7 平方英寸。

  • 字體大小以大點為單位。

  • 默認字體係列是 Helvetica。

  • 線寬為 1/96 英寸的倍數,最小強製為 0.01。

  • 任何半徑的圓都是允許的。

  • 顏色默認指定為 sRGB。

當線寬非常小時,線型可能會被迫為實線。

光柵圖像目前僅限於不透明顏色。

注意

如果您發現 Postscript 輸出有問題,請記住,問題更有可能出現在您的查看器中,而不是出現在R。如果可能的話,嘗試使用其他查看器。查看器出現錯誤的症狀是圖像圖上出現明顯的網格(如果可以的話,請關閉查看器中的圖形抗鋸齒函數)以及文本中丟失或不正確的字形(查看器默默地進行字體替換)。

不幸的是,大多數 Linux 和 macOS 係統上的默認查看器都存在這些問題,並且沒有明顯的方法來關閉圖形抗鋸齒。

例子

require(graphics)
## Not run: 
# open the file "foo.ps" for graphics output
postscript("foo.ps")
# produce the desired graph(s)
dev.off()              # turn off the postscript device

## On Unix-alikes only:
postscript("|lp -dlw")
# produce the desired graph(s)
dev.off()              # plot will appear on printer

## On Windows:
options(printcmd = 'redpr -P"\\printhost\lw"')
postscript(file = tempfile("Rps."), print.it = TRUE)
# produce the desired graph(s)
dev.off()              # send plot file to the printer
## alternative using GSView 4.x :
options(printcmd = '/GhostGum/gsview/gsprint -query')


# for URW PostScript devices
postscript("foo.ps", family = "NimbusSan")

## for inclusion in Computer Modern TeX documents, perhaps
postscript("cm_test.eps", width = 4.0, height = 3.0,
           horizontal = FALSE, onefile = FALSE, paper = "special",
           family = "ComputerModern", encoding = "TeXtext.enc")
## The resultant postscript file can be used by dvips -Ppfb -j0.

## To test out encodings, you can use
TestChars <- function(encoding = "ISOLatin1", family = "URWHelvetica")
{
    postscript(encoding = encoding, family = family)
    par(pty = "s")
    plot(c(-1,16), c(-1,16), type = "n", xlab = "", ylab = "",
         xaxs = "i", yaxs = "i")
    title(paste("Centred chars in encoding", encoding))
    grid(17, 17, lty = 1)
    for(i in c(32:255)) {
        x <- i %% 16
        y <- i %/% 16
        points(x, y, pch = i)
    }
    dev.off()
}
## there will be many warnings.  We use URW to get a complete enough
## set of font metrics.
TestChars()
TestChars("ISOLatin2")
TestChars("WinAnsi")

## End(Not run)

作者

Support for Computer Modern fonts is based on a contribution by Brian D'Urso durso@hussle.harvard.edu.

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

postscriptFontsDevicescheck.options 均從 ps.optionspostscript 調用。

cairo_ps 用於另一個可以生成 PostScript 的設備。

有關字體係列和編碼,尤其是處理非 Latin-1 編碼中的文本和嵌入字體的更多詳細信息,請參閱

保羅·默雷爾和布萊恩·裏普利 (2006)。 “PostScript 和 PDF 圖形中的非標準字體。” R新聞,6(2),41-47。https://www.r-project.org/doc/Rnews/Rnews_2006-2.pdf.

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 PostScript Graphics。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。