在RMarkdown中使用LaTeX动画包

时间:2017-10-27 15:01:05

标签: r pdf animation knitr r-markdown

我想使用LaTeX animate包以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")
```

header_ani.tex

\usepackage{animate}

问题

  

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

     

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

备注

为什么引用。根据 knitr documentation

  

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

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

enter image description here

(RStudio: RMarkdown)

强制在线的某处使用

问题

是否可以在RMarkdown文档中使用animate包,并避免使用,以便获取的PDF具有以下组件,其中包含由animate包授予的conrtols。

chart with controls

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

1 个答案:

答案 0 :(得分:2)

借鉴类似的回答 (Plot animation in knitr rmarkdown)LaTeX-related discussion我提出了以下解决方案:

---
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}
~~~

标题文件有问题。代码生成带有所需控件的动画图形。

预览

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

preview of generated animation

注释

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