使用循环的绘图标题中的 LaTeX
LaTeX in plot titles using a loop
我刚刚学会了如何将(有限数量的)LaTeX 表达式插入到我的情节标题中
expression(<LaTeX code>)
。如何使用 loop 生成标题中包含 LaTeX 的绘图?例如,假设我有:
par(mfrow = c(2,2))
x <- seq(1,10,0.1)
y <- sin(x)
plot(x, y, main = expression(sigma[1]))
plot(x, y, main = expression(sigma[2]))
这会产生所需的输出:
如何通过用循环替换最后两行来实现相同的输出?我试过了
par(mfrow = c(2,2))
for (i in 1:2){
plot(x, y, main = expression(sigma[i]))
}
但 i
未被解释为变量:
有什么解决办法吗?
我们可以用bquote
代替expression
。这允许部分取消引用,这意味着您可以通过像这样包装它来替换表达式中 i 的 value:.(i)
par(mfrow = c(2,2))
x <- seq(1,10,0.1)
y <- sin(x)
for(i in 1:4) plot(x, y, main = bquote(paste("My plot for ", sigma[.(i)], " :")))
由 reprex package (v2.0.1)
于 2022-02-19 创建
par(mfrow = c(2,2))
loop.vector <- 1:2
for (i in loop.vector) {
x <- seq(1,10,0.1)
y <- sin(x)
plot(x, y, main = bquote(sigma[.(i)]))
}
另一种选择是substitute
for (i in 1:2){
plot(x, y, main = substitute(paste("My plot for ", sigma[i]), list(i = i)))
}
-输出
供大家参考,还有tikzDevice
,实际生成.tex
:
sigma <- 2^(1:4)
x <- seq(0, 2 * pi, 0.01 * pi)
tikzDevice::tikz("sine.tex", standAlone = TRUE)
par(mfrow = c(2L, 2L))
for (i in seq_along(sigma)) {
y <- sin(sigma[i] * x)
plot(x, y, type = "o", xlab = "$x$", ylab = "$y$",
main = sprintf("$y = \sin(\sigma_{%d} x)$", i))
}
dev.off()
tools::texi2dvi("sine.tex", pdf = TRUE)
system(paste(getOption("pdfviewer"), "sine.pdf"))
我刚刚学会了如何将(有限数量的)LaTeX 表达式插入到我的情节标题中
expression(<LaTeX code>)
。如何使用 loop 生成标题中包含 LaTeX 的绘图?例如,假设我有:
par(mfrow = c(2,2))
x <- seq(1,10,0.1)
y <- sin(x)
plot(x, y, main = expression(sigma[1]))
plot(x, y, main = expression(sigma[2]))
这会产生所需的输出:
如何通过用循环替换最后两行来实现相同的输出?我试过了
par(mfrow = c(2,2))
for (i in 1:2){
plot(x, y, main = expression(sigma[i]))
}
但 i
未被解释为变量:
有什么解决办法吗?
我们可以用bquote
代替expression
。这允许部分取消引用,这意味着您可以通过像这样包装它来替换表达式中 i 的 value:.(i)
par(mfrow = c(2,2))
x <- seq(1,10,0.1)
y <- sin(x)
for(i in 1:4) plot(x, y, main = bquote(paste("My plot for ", sigma[.(i)], " :")))
由 reprex package (v2.0.1)
于 2022-02-19 创建par(mfrow = c(2,2))
loop.vector <- 1:2
for (i in loop.vector) {
x <- seq(1,10,0.1)
y <- sin(x)
plot(x, y, main = bquote(sigma[.(i)]))
}
另一种选择是substitute
for (i in 1:2){
plot(x, y, main = substitute(paste("My plot for ", sigma[i]), list(i = i)))
}
-输出
供大家参考,还有tikzDevice
,实际生成.tex
:
sigma <- 2^(1:4)
x <- seq(0, 2 * pi, 0.01 * pi)
tikzDevice::tikz("sine.tex", standAlone = TRUE)
par(mfrow = c(2L, 2L))
for (i in seq_along(sigma)) {
y <- sin(sigma[i] * x)
plot(x, y, type = "o", xlab = "$x$", ylab = "$y$",
main = sprintf("$y = \sin(\sigma_{%d} x)$", i))
}
dev.off()
tools::texi2dvi("sine.tex", pdf = TRUE)
system(paste(getOption("pdfviewer"), "sine.pdf"))