使用循环在绘图标题中插入LaTeX

5

我刚学会了如何在图表标题中插入 (有限的) LaTeX 表达式,方法是使用 expression(<LaTeX 代码>)。怎么使用 循环 生成包含 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没有被解释为一个变量:

enter image description here

有什么解决办法吗?

4个回答

4
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)]))
}

enter image description here


是的,你是对的。我认为你更快。我应该删除吗? - TarJae

4
我们可以使用 bquote 替代 expression。这允许部分取消引用,意味着您可以通过像这样包装它来替换表达式中的 i 的值:.(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 创建


谢谢您的快速回答!我有一个后续问题:假设我想让标题包含一些常规文本,这些文本在所有图中都是固定的,例如“我的 $\sigma = 1$ 的图”,“我的 $\sigma = 2$ 的图”,“我的 $\sigma = 3$ 的图”等等... 我应该如何修改您的代码来实现这个目标? - Leonidas
我尝试使用 plot(x, y, main = paste0("My plot for ", bquote(expression(sigma)), " = ", toString(i))),但是显示出来的 sigma 不是 TeX 格式,并且每个图形的标题都会重复出现两次。 - Leonidas
@Leonidas 看看我的更新 - 你可以使用 paste - Allan Cameron

3
另一个选择是substitute
for (i in 1:2){
     plot(x, y, main = substitute(paste("My plot for ", sigma[i]), list(i = i)))
 }

-output

enter image description here


1

供您参考,还有 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"))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接