在RMarkdown中使用LaTeX动画包

Kon*_*rad 5 pdf animation r knitr r-markdown

我想使用LaTeX 动画包生成PDF格式的动画图形.

---
title: "test_animations"
author: "Colours"
date: "27/10/2017"
output: 
    pdf_document:
        includes:
            in_header: header_ani.tex

---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
pacman::p_load(gganimate, gapminder, ggplot2)
```

## Test animations

```{r sample_ani, fig.show='animate', message=FALSE, warning=FALSE}
p2 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop)) +
  geom_point() +
  geom_point(aes(frame = year), color = "red") +
  scale_x_log10()
gganimate(p2, saver = "gif")
```
Run Code Online (Sandbox Code Playgroud)

header_ani.tex

\usepackage{animate}
Run Code Online (Sandbox Code Playgroud)

问题

警告:忽略未知的美学:框架

从第20-25行退出(second_animation.Rmd)错误:找不到ffmpeg命令.您应该更改animation.fun挂钩选项或安装启用了libvpx的ffmpeg.执行停止

笔记

为什么要引用.根据knitr文件:

当chunk选项fig.show ='animate'并且从代码块产生多个图时,所有图将被组合成动画.对于LaTeX输出,LaTeX包animate用于在PDF中创建动画. 对于HTML/Markdown输出,默认情况下FFmpeg用于创建WebM视频.请注意,在安装FFmpeg时必须启用libvpx支持.Linux和Windows用户只需按照FFmpeg网站上的下载链接(libvpx已在二进制文件中启用).对于OS X用户,您可以通过Homebrew安装FFmpeg

应该用于转换为html.是因为RMarkdown的管道?

在此输入图像描述

(RStudio:RMarkdown)

强迫在线上某处使用

是否可以在RMarkdown文档中使用animate包并避免使用以便获得的PDF具有以下组件,其中包含animate包含的anrtol.

带控件的图表

(不是我想要生成的图表,而是显示动画图形应该如何嵌入到PDF中,取自上面引用的动画包文档.)

Kon*_*rad 3

根据类似的答案(Knitr rmarkdown 中的绘图动画)和与LaTeX 相关的讨论,我提出了以下解决方案:

---
title: "test_animations"
author: "Colours"
date: "27/10/2017"
classoption: landscape
output: 
    pdf_document:
        keep_tex: true
        includes:
            in_header: header_ani.tex

---

```{r setup, include=FALSE}
Vectorize(require)(package = c("knitr"),
               character.only = TRUE)
opts_chunk$set(echo = FALSE,
               cache = TRUE)
pacman::p_load(gganimate, gapminder, ggplot2)
```

## Test animations

```{r sample_ani, message=TRUE, warning=TRUE, echo=TRUE, }
p2 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop)) +
  geom_point() +
  geom_point(aes(frame = year), color = "red") +
  scale_x_log10()
gganimate(p2, filename = "animation2.gif", title_frame = TRUE) -> amimate
```
<!-- Notes on the answer: https://tex.stackexchange.com/a/240387/123504 -->

```{r convert_shele, echo=TRUE, message=TRUE, warning=TRUE, paged.print=FALSE}
# Extra options for resize can be added
system(command = "convert -coalesce animation2.gif something.png")
```


  \animategraphics[loop,controls,width=\linewidth]{12}{something-}{0}{12}

# Latex code generating animation

Figures 0 - 12 should reflect frames

~~~
  \animategraphics[loop,controls,width=\linewidth]{12}{something-}{0}{12}
~~~
Run Code Online (Sandbox Code Playgroud)

头文件如所讨论的那样。该代码生成带有所需控件的动画图表。

预览

生成的动画的快照以及可用的控件。

生成的动画的预览

笔记

  • 该代码使用外部convert命令。我认为这不是最佳选择,因为它涉及来回转换图表。
  • 由于上述原因,{12}{something-}{0}{12}必须手动设置 中的值,其中第一个数字反映帧速率(降低将减慢动画速度)something-对应于通过convert命名生成的文件something-0.png ... something-n.png{0}{12}对应于文件编号。