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