以编程方式使用xaringan和plotly在R中生成幻灯片

时间:2017-12-20 18:48:43

标签: r ggplot2 r-markdown plotly xaringan

我最近开始使用xaringan,它真的很整洁。感谢Yihui的精彩套餐。我想知道的一个问题是,是否可以在for循环中以编程方式生成幻灯片,每个幻灯片包含一个情节图?我知道我可以像这样生成ggplots的幻灯片,其中ggplot_list是ggplots的列表:

```{r, message=FALSE, warning=FALSE, results='asis'}
for (p in ggplot_list) {
  cat("\n\n---\n")
  print(p)
}
```

这很有效。

我还可以通过调用ggplotly(ggplot_list[[1]])来包含单独的情节图,这也很有效。

但我似乎无法将两者结合起来,天真地做以下操作会为我生成空幻灯片。

```{r, message=FALSE, warning=FALSE, results='asis'}
for (p in ggplot_list) {
  cat("\n\n---\n")
  ggplotly(p)
}
```

更新:在这里,我提供了迄今为止我尝试过的最小例子。

---
title: "xaringan + plotly + loop?"
subtitle: "Does it work?"
author: "Fenfen Kan"
date: "2017/13/32"
output:
  xaringan::moon_reader:
    lib_dir: libs
    nature:
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false
---

```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
```

# Several boring ggplots

```{r, message=FALSE, warning=FALSE}
library(ggplot2)
library(plotly)

p1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point(aes(color=Species))

p2 <- ggplot(iris, aes(Petal.Length, Petal.Width)) +
  geom_point(aes(color=Species))

p3 <- ggplot(iris, aes(Sepal.Length, Petal.Length)) +
  geom_point(aes(color=Species))

ggplot_list <- list(p1, p2, p3)
```


---
# Invididual plotly works

```{r}
ggplotly(p1)
```

---
# ggplot slides in loop also works

```{r, message=FALSE, warning=FALSE, results='asis'}
for (p in ggplot_list) {
  cat("\n\n---\n")
  print(p)
}
```

---
# plotly in loop doesn't work

```{r, message=FALSE, warning=FALSE, results='asis'}
for (p in ggplot_list) {
  cat("\n\n---\n")
  ggplotly(p)
}
```

# print(ggplotly(p)) in loop doesn't work either
```{r, message=FALSE, warning=FALSE, results='asis'}
for (p in ggplot_list) {
  cat("\n\n---\n")
  print(ggplotly(p))
}
```

1 个答案:

答案 0 :(得分:4)

我最近在<Slider style={styles.slider} thumbTintColor='rgb(252, 228, 149)' step={1} maximumValue={5} thumbTintColor='rgb(252, 228, 149)' maximumTrackTintColor='#494A48' minimumTrackTintColor='rgb(252, 228, 149)' /> 尝试做类似的事情时想出了一个解决方案。我把它添加到上面的例子中。参见最后一节 - 它在一个循环中生成3个绘图幻灯片。

knitr