gpt4 book ai didi

r - 使用knitr在beamer中叠加动画

转载 作者:行者123 更新时间:2023-12-02 22:30:01 24 4
gpt4 key购买 nike

我想使用knitr包和 block 选项fig.show='animate'在beamer中创建一个动画,其中的数字被覆盖而不是被替换,类似于\multiinclude的工作方式默认。

一个最小的非工作示例如下(Rnw 文件),我希望将每个点逐一添加到动画中的现有绘图中。

\documentclass{beamer}
\usepackage{animate}
\begin{document}
\begin{frame}[fragile]
<<fig.show='animate', fig.width=5, fig.height=5, size='tiny', out.width='.8\\linewidth', fig.align='center', echo=FALSE>>=
x = 1:2
plot(x,x,type="n")
for (i in 1:length(x)) {
points(x[i],x[i])
}
@
\end{frame}
\end{document}

查看knitr graphics manual ,它指出绘图的两个来源是 plot.new()grid.newpage(),但有一个脚注可以查看 ?recordPlot 。因此,我尝试将 recordPlot() 放在 points 命令之后(并且还通过 par(bg=NA) 添加透明背景,但这确实不起作用,因为只创建了一个图。

一个最小的工作示例如下

\documentclass{beamer}
\usepackage{animate}
\begin{document}
\begin{frame}[fragile]
<<fig.show='animate', fig.width=5, fig.height=5, size='tiny', out.width='.8\\linewidth', fig.align='center', echo=FALSE, fig.keep='all'>>=
x = 1:2
plot(x,x,type="n")
for (i in 1:length(x)) {
for (j in 1:i) points(x[j],x[j])
}
@
\end{frame}
\end{document}

但这似乎有点矫枉过正,因为每个人物都重新绘制了情节和前面的所有要点。

有什么方法可以消除 j 上的循环吗?或其他一些方法来覆盖投影机/针织物中的绘图?如果是,如何修改我上面的代码才能实现这一点?

最佳答案

正如图形手册所解释的,仅记录来自高级绘图命令(例如 plot.new())的绘图和完整的表达式。这意味着,如果在 for 循环中存在多个低级绘图更改,这些更改将不会被一一记录,因为 for 循环中只有一个 R 表达式。这就是手册中图 4 所说明的内容。

如果要从 for 循环创建动画,循环中必须有高级绘图命令。手册中的图7就是这样的一个例子。

在您的情况下,您必须将 plot() 调用移至循环中:

x = 1:2
for (i in 1:length(x)) {
plot(x, x, type = "n")
points(x[1:i], x[1:i])
}

是的,这看起来是一种严重的资源浪费,“自然”的方式应该是像你一样逐个添加点,而不是打开一个新的绘图并从 1 绘制点到i,但无法检测单个 R 表达式内的低级图形变化。

关于r - 使用knitr在beamer中叠加动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22745872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com