【发布时间】:2018-05-24 00:09:18
【问题描述】:
我正在使用 R 的 knitr 包来生成将文本与嵌入式 R 绘图和输出相结合的 LaTeX 文档。
这样写是很常见的:
We plot y vs x in a scatter plot and add the least squares line:
<<scatterplot>>=
plot(x, y)
fit <- lm(y~x)
abline(fit)
@
效果很好。
(对于那些不熟悉knitr 或Sweave 的人,这会在 LaTeX 逐字环境中回显代码和输出,并将完成的绘图作为图形添加到 LaTeX 文档中。)
但现在我想写更详细的逐行评论,例如:
First we plot y vs x with a scatterplot:
<<scatterplot>>=
plot(x, y)
@
Then we regress y on x and add the least squares line to the plot:
<<addline>>=
fit <- lm(y~x)
abline(fit)
@
问题是现在有两个knitr 代码块用于同一个情节。第二个代码块addline 失败,因为在第一个代码块scatterplot 中创建的图框对第二个代码块中的代码不可见。绘图窗口似乎不会从一个代码块持续到下一个代码块。
有什么方法可以告诉knit() 让plot() 创建的绘图窗口为第二个代码块保持活动状态?
如果这不可能,我还能如何在添加到现有绘图的代码行上实现 LaTeX 样式的注释?
一天后
我现在可以看到之前已经问过基本上相同的问题,请参阅: How to build a layered plot step by step using grid in knitr? 从 2013 年开始 Splitting a plot call over multiple chunks 从 2016 年开始。 2013 年的另一个问题也非常相似: How to add elements to a plot using a knitr chunk without original markdown output?
【问题讨论】:
-
您希望最终文档的外观如何?您是否在文档中显示代码(即
echo=TRUE)?只是你想展示和评论代码,然后渲染一次最终的情节吗?还是您想先显示没有 abline 的情节,然后再显示 abline 的情节? -
@eipi10 我正在显示代码(echo=TRUE 和 eval=TRUE 设置为默认值)。我的意图是在文档中只包含一个完整的图,而不是在有或没有最小二乘线的情况下重复它。情节将处于浮动环境中。我实际上正在为期刊 (F1000Research) 写一篇代码工作流文章。