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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。