plotmath
位於 grDevices
包(package)。 說明
如果text
文本繪製函數之一的參數(text
,mtext
,axis
,legend
) 在R是一個表達式,參數被解釋為數學表達式,並且輸出將根據TeX-like規則進行格式化。表達式還可以用於標題、副標題以及 x 和 y 軸標簽(但不能用於persp
地塊)。
在大多數情況下,其他語言對象(名稱和調用,包括公式)被強製為表達式,因此也可以使用。
細節
數學表達式必須遵守任何語法的正常規則R表達式,但它的解釋規則與正常規則截然不同R表達式。
可以生成許多不同的數學符號、生成下標或上標、生成分數等。
輸出來自demo(plotmath)
包括幾個顯示可用函數的表格。在這些表中,灰色文本列顯示示例R表達式,黑色文本列顯示結果輸出。
下表還說明了可用的函數:
Syntax | Meaning |
x + y | x 加 y |
x - y | x 減 y |
x*y | 將 x 和 y 並置 |
x/y | x 正斜杠 y |
x %+-% y | x 加或減 y |
x %/% y | x 除以 y |
x %*% y | x 乘以 y |
x %.% y | x c點 y |
x[i] | x 下標 i |
x^2 | x 上標 2 |
paste(x, y, z) | 並置 x、y 和 z |
sqrt(x) | x 的平方根 |
sqrt(x, y) | x 的 y 根 |
x == y | x 等於 y |
x != y | x 不等於 y |
x < y | x 小於 y |
x <= y | x 小於或等於 y |
x > y | x 大於 y |
x >= y | x 大於或等於 y |
!x | 不是x |
x %~~% y | x 約等於 y |
x %=~% y | x 和 y 一致 |
x %==% y | x 定義為 y |
x %prop% y | x 與 y 成正比 |
x %~% y | x 分布為 y |
plain(x) | 以普通字體繪製 x |
bold(x) | 以粗體字體繪製 x |
italic(x) | 以斜體字體繪製x |
bolditalic(x) | 以粗斜體字體繪製 x |
symbol(x) | 以符號字體繪製x |
list(x, y, z) | 逗號分隔的列表 |
... | 省略號(高度不同) |
cdots | 省略號(垂直居中) |
ldots | 省略號(基線) |
x %subset% y | x 是 y 的真子集 |
x %subseteq% y | x 是 y 的子集 |
x %notsubset% y | x 不是 y 的子集 |
x %supset% y | x 是 y 的真超集 |
x %supseteq% y | x 是 y 的超集 |
x %in% y | x 是 y 的元素 |
x %notin% y | x 不是 y 的元素 |
hat(x) | x 帶有抑揚符 |
tilde(x) | x 帶波形符 |
dot(x) | x 帶點 |
ring(x) | x 帶環 |
bar(xy) | xy 帶條 |
widehat(xy) | xy 帶有寬抑揚符 |
widetilde(xy) | xy 帶有寬波浪號 |
x %<->% y | x double-arrow y |
x %->% y | x right-arrow y |
x %<-% y | x left-arrow y |
x %up% y | x up-arrow y |
x %down% y | x down-arrow y |
x %<=>% y | x 等於 y |
x %=>% y | x 隱含 y |
x %<=% y | y 意味著 x |
x %dblup% y | x double-up-arrow y |
x %dbldown% y | x double-down-arrow y |
alpha -- omega | 希臘符號 |
Alpha -- Omega | 大寫希臘符號 |
theta1, phi1, sigma1, omega1 | 草書希臘符號 |
Upsilon1 | 帶鉤子的大寫upsilon |
aleph | 希伯來字母表的第一個字母 |
infinity | 無窮大符號 |
partialdiff | 偏微分符號 |
nabla | nabla,漸變符號 |
32*degree | 32度 |
60*minute | 60分鍾角度 |
30*second | 30秒角度 |
displaystyle(x) | 以正常尺寸繪製x(額外間距) |
textstyle(x) | 以正常大小繪製x |
scriptstyle(x) | 將x畫成小尺寸 |
scriptscriptstyle(x) | 將 x 畫得非常小 |
underline(x) | 畫x下劃線 |
x ~~ y | 在 x 和 y 之間放置額外的空格 |
x + phantom(0) + y | 為"0"留出間隙,但不要繪製它 |
x + over(1, phantom(0)) | 為"0"留下垂直間隙(不繪製) |
frac(x, y) | x 超過 y |
over(x, y) | x 超過 y |
atop(x, y) | x 超過 y(無水平條) |
sum(x[i], i==1, n) | x[i] 之和,其中 i 等於 1 到 n |
prod(plain(P)(X==x), x) | 所有 x 值的 P(X=x) 的乘積 |
integral(f(x)*dx, a, b) | f(x) 對 x 的定積分 |
union(A[i], i==1, n) | A[i] 的並集,其中 i 等於 1 到 n |
intersect(A[i], i==1, n) | A[i] 的交集 |
lim(f(x), x %->% 0) | x 趨於 0 時 f(x) 的極限 |
min(g(x), x > 0) | x 大於 0 時 g(x) 的最小值 |
inf(S) | S 的下確界 |
sup(S) | S 的上界 |
x^y + z | 正常運算符優先級 |
x^(y + z) | 可見的操作數分組 |
x^{y + z} | 不可見的操作數分組 |
group("(",list(a, b),"]") | 指定左右分隔符 |
bgroup("(",atop(x,y),")") | 使用可擴展分隔符 |
group(lceil, x, rceil) | 特殊分隔符 |
group(lfloor, x, rfloor) | 特殊分隔符 |
group(langle, list(x, y), rangle) | 特殊分隔符 |
支持的“可擴展分隔符”是 | ( [ {
及其右側版本。 "."
相當於""
:相應的分隔符將被省略。支持分隔符 ||
但與 |
具有相同的效果。特殊分隔符 lceil
、 lfloor
、 langle
(及其右側版本)不可擴展。
注意paste
並置時不插入空格,與(默認情況下)不同R該名稱的函數。
符號字體使用 Adobe Symbol 編碼,因此,例如,可以通過特殊符號 mu
或 symbol("m")
獲得小寫 mu。這提供了對沒有特殊符號名稱的符號的訪問,例如,通用符號或 forall 符號是 symbol("\042")
。要查看以這種方式可用的符號,請使用 TestChars(font=5)
,如 points
示例中給出的:有些符號僅在某些設備上可用。
TeX 用戶請注意:TeX 的‘\Upsilon' 是Upsilon1
, TeX 的 '\varepsilon' 接近epsilon
,並且沒有與 TeX 的 ‘ 等價的\epsilon’。 TeX 的‘\varpi' 接近omega1
.vartheta
,varphi
和varsigma
允許作為同義詞theta1
,phi1
和sigma1
.
sigma1
也稱為 stigma
,它的 Unicode 名稱。
控製字符(例如,‘\n’) 與普通繪圖不同,在繪圖數學中不會以字符串形式進行解釋。
使用的字體取自當前字體係列,因此可以通過基礎圖形中的par(family=)
和包grid
中的gpar(fontfamily=)
進行設置。
請注意, bold
、 italic
和 bolditalic
不適用於符號,因此不適用於以符號字體顯示的希臘符號,例如 mu
。它們也不適用於數字常量。
其他符號
在許多操作係統和某些圖形設備上,許多其他符號可作為標準文本字體的一部分使用,並且 Adobe Symbol 編碼中的所有符號原則上都可以通過更改字體或(請參閱“詳細信息”)繪圖來使用:請參閱points
的示例部分用於顯示它們的函數。 (“原則上”是因為符號字體的某些實現中缺少一些字形。)不幸的是,postscript
和 pdf
僅支持歐洲(不是希臘語)和 CJK 字符以及 Adobe Symbol 編碼(在一些字體中,還有西裏爾字母)。
- 在 Unix 類係統上:
-
在 UTF-8 語言環境中,可以輸入任何 Unicode 字符,可能是“\uxxxx' 或者 '\Uxxxxxxxxx’轉義序列,但問題是圖形設備是否能夠顯示該字符。最廣泛的字符範圍可能是可用的
X11
使用 cairo 的設備:請參閱其幫助頁麵,了解安裝其他字體有何幫助。這通常可以用來顯示希臘語字母粗體或斜體。在非 UTF-8 語言環境中,通常不支持當前編碼所針對的語言以外的符號。
- 在 Windows 上:
-
任何 Unicode 字符都可以輸入到文本字符串中通過A '\uxxxx’ 轉義,或在調用中由號碼使用
points
。這windows
如果這些字符在所使用的字體中可用,則一係列設備可以顯示這些字符。這通常可以用來顯示希臘語字母粗體或斜體。找出字體中可用的字符並確定 Unicode 編號的一個好方法是使用“字符映射表”附件(通常位於“開始”菜單的“附件 -> 係統工具”下)。您還可以將 copy-and-paste 字符從“字符映射表”窗口發送到
Rgui
控製台(但不能發送到Rterm
)。
例子
require(graphics)
x <- seq(-4, 4, length.out = 101)
y <- cbind(sin(x), cos(x))
matplot(x, y, type = "l", xaxt = "n",
main = expression(paste(plain(sin) * phi, " and ",
plain(cos) * phi)),
ylab = expression("sin" * phi, "cos" * phi), # only 1st is taken
xlab = expression(paste("Phase Angle ", phi)),
col.main = "blue")
axis(1, at = c(-pi, -pi/2, 0, pi/2, pi),
labels = expression(-pi, -pi/2, 0, pi/2, pi))
## How to combine "math" and numeric variables :
plot(1:10, type="n", xlab="", ylab="", main = "plot math & numbers")
theta <- 1.23 ; mtext(bquote(hat(theta) == .(theta)), line= .25)
for(i in 2:9)
text(i, i+1, substitute(list(xi, eta) == group("(",list(x,y),")"),
list(x = i, y = i+1)))
## note that both of these use calls rather than expressions.
##
text(1, 10, "Derivatives:", adj = 0)
text(1, 9.6, expression(
" first: {f * minute}(x) " == {f * minute}(x)), adj = 0)
text(1, 9.0, expression(
" second: {f * second}(x) " == {f * second}(x)), adj = 0)
## note the "{ .. }" trick to get "chained" equations:
plot(1:10, 1:10, main = quote(1 <= {1 < 2}))
text(4, 9, expression(hat(beta) == (X^t * X)^{-1} * X^t * y))
text(4, 8.4, "expression(hat(beta) == (X^t * X)^{-1} * X^t * y)",
cex = .8)
text(4, 7, expression(bar(x) == sum(frac(x[i], n), i==1, n)))
text(4, 6.4, "expression(bar(x) == sum(frac(x[i], n), i==1, n))",
cex = .8)
text(8, 5, expression(paste(frac(1, sigma*sqrt(2*pi)), " ",
plain(e)^{frac(-(x-mu)^2, 2*sigma^2)})),
cex = 1.2)
## some other useful symbols
plot.new(); plot.window(c(0,4), c(15,1))
text(1, 1, "universal", adj = 0); text(2.5, 1, "\\042")
text(3, 1, expression(symbol("\042")))
text(1, 2, "existential", adj = 0); text(2.5, 2, "\\044")
text(3, 2, expression(symbol("\044")))
text(1, 3, "suchthat", adj = 0); text(2.5, 3, "\\047")
text(3, 3, expression(symbol("\047")))
text(1, 4, "therefore", adj = 0); text(2.5, 4, "\\134")
text(3, 4, expression(symbol("\134")))
text(1, 5, "perpendicular", adj = 0); text(2.5, 5, "\\136")
text(3, 5, expression(symbol("\136")))
text(1, 6, "circlemultiply", adj = 0); text(2.5, 6, "\\304")
text(3, 6, expression(symbol("\304")))
text(1, 7, "circleplus", adj = 0); text(2.5, 7, "\\305")
text(3, 7, expression(symbol("\305")))
text(1, 8, "emptyset", adj = 0); text(2.5, 8, "\\306")
text(3, 8, expression(symbol("\306")))
text(1, 9, "angle", adj = 0); text(2.5, 9, "\\320")
text(3, 9, expression(symbol("\320")))
text(1, 10, "leftangle", adj = 0); text(2.5, 10, "\\341")
text(3, 10, expression(symbol("\341")))
text(1, 11, "rightangle", adj = 0); text(2.5, 11, "\\361")
text(3, 11, expression(symbol("\361")))
參考
Murrell, P. and Ihaka, R. (2000). An approach to providing mathematical annotation in plots. Journal of Computational and Graphical Statistics, 9, 582-599. doi:10.2307/1390947.
A list of the symbol codes can be found in decimal, octal and hex at https://www.stat.auckland.ac.nz/~paul/R/CM/AdobeSym.html.
也可以看看
demo(plotmath)
、axis
、mtext
、text
、title
、substitute
、quote
、bquote
相關用法
- R pdf.options 設置/查看 pdf 參數默認值的輔助函數
- R postscript PostScript 圖形
- R pdf PDF圖形設備
- R pretty.Date 日期時間類的漂亮斷點
- R pictex PicTeX 圖形驅動程序
- R postscriptFonts PostScript 和 PDF 字體係列
- R ps.options 用於設置/查看 postscript 參數默認值的輔助函數
- R palette 設置或查看圖形調色板
- R png BMP、JPEG、PNG 和 TIFF 圖形設備
- R axisTicks 計算漂亮的軸刻度
- R hcl HCL 顏色規格
- R quartzFonts 石英字體
- R as.graphicsAnnot 強製圖形注釋對象
- R xyTable (x,y) 點的重數,例如,對於向日葵圖
- R dev.interactive 當前圖形設備是否具有交互性?
- R chull 計算一組點的凸包
- R convertColor 在色彩空間之間轉換
- R X11Fonts X11 字體
- R dev.capture 將設備輸出捕獲為光柵圖像
- R dev.size 查找設備表麵的尺寸
- R densCols 平滑密度圖的顏色
- R windows Windows 圖形設備
- R rgb RGB 顏色規格
- R check.options 設置帶有一致性檢查的選項
- R msgWindow 操縱窗口
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Mathematical Annotation in R。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。