使用循环的绘图标题中的 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。这允许部分取消引用,这意味着您可以通过像这样包装它来替换表达式中 ivalue.(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"))