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


R plotmath R 中的數學注釋

R語言 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) 特殊分隔符

支持的“可擴展分隔符”是 | ( [ { 及其右側版本。 "." 相當於"":相應的分隔符將被省略。支持分隔符 || 但與 | 具有相同的效果。特殊分隔符 lceillfloorlangle (及其右側版本)不可擴展。

注意paste並置時不插入空格,與(默認情況下)不同R該名稱的函數。

符號字體使用 Adobe Symbol 編碼,因此,例如,可以通過特殊符號 musymbol("m") 獲得小寫 mu。這提供了對沒有特殊符號名稱的符號的訪問,例如,通用符號或 forall 符號是 symbol("\042") 。要查看以這種方式可用的符號,請使用 TestChars(font=5),如 points 示例中給出的:有些符號僅在某些設備上可用。

TeX 用戶請注意:TeX 的‘⁠\Upsilon⁠' 是Upsilon1, TeX 的 '⁠\varepsilon⁠' 接近epsilon,並且沒有與 TeX 的 ‘ 等價的⁠\epsilon⁠’。 TeX 的‘⁠\varpi⁠' 接近omega1.vartheta,varphivarsigma允許作為同義詞theta1,phi1sigma1.

sigma1 也稱為 stigma ,它的 Unicode 名稱。

控製字符(例如,‘⁠\n⁠’) 與普通繪圖不同,在繪圖數學中不會以字符串形式進行解釋。

使用的字體取自當前字體係列,因此可以通過基礎圖形中的par(family=)和包grid中的gpar(fontfamily=)進行設置。

請注意, bolditalicbolditalic 不適用於符號,因此不適用於以符號字體顯示的希臘符號,例如 mu。它們也不適用於數字常量。

其他符號

在許多操作係統和某些圖形設備上,許多其他符號可作為標準文本字體的一部分使用,並且 Adobe Symbol 編碼中的所有符號原則上都可以通過更改字體或(請參閱“詳細信息”)繪圖來使用:請參閱points 的示例部分用於顯示它們的函數。 (“原則上”是因為符號字體的某些實現中缺少一些字形。)不幸的是,postscriptpdf 僅支持歐洲(不是希臘語)和 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)axismtexttexttitlesubstitutequotebquote

相關用法


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