Перебирая список ggplots и давая каждому подпись к рисунку, используя Knitr - PullRequest
0 голосов
/ 13 октября 2018

Я создаю серию графиков, используя ggplot2 .Каждое из них имеет программные имена, и я хочу использовать имена, чтобы дать каждому свою подпись к рисунку.Я хочу вытащить имена из списка и динамически передать их в fig.cap.

Есть ли способ сделать это?Вот MCVE, и вы можете переключаться между списком и отдельными графиками, чтобы увидеть, как цифры исчезают или появляются:

---
output: pdf_document
---

```{r, include = FALSE}
library(ggplot2)
library(knitr)
opts_chunk$set(echo=FALSE)
```

```{r}
## Plot 1
listOfPlots <- list(
  # Plot 1
  ggplot(data = diamonds) +
    geom_point(aes(carat, price)),

  ## Plot 2
  ggplot(data = diamonds) +
    geom_point(aes(carat, depth))
)

names(listOfPlots) <- c("This is caption 1", "This is caption 2")
```


```{r, fig.cap = c("This is caption 1", "This is caption 2"), echo=TRUE}

listOfPlots

# listOfPlots$`This is caption 1`
# listOfPlots$`This is caption 2`
```

Примечания:

  • Yihui и другие сказали (https://groups.google.com/forum/#!topic/knitr/MJVLiVyGCro),, что для того, чтобы иметь несколько фигур в чанке и дать им подпись к фигуре, вам нужно иметь echo = TRUE, потому что встроенные фигуры и вещи pandoc.
  • Я надеваюЯ не хочу показывать код, и число цифр может быть переменным, поэтому я не хочу жестко кодировать вещи. Интересно, что использование списка ggplots также не работает, даже если echo = TRUE. Мне нужно отдельно вызывать каждый ggplot.

1 Ответ

0 голосов
/ 14 октября 2018

Должны быть пробелы между графиками в R Markdown, если они должны иметь собственную подпись.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

```{r, fig.cap=c("Caption 1", "Caption 2")} 
listOfPlots[[1]]
cat('\n\n') 
listOfPlots[[2]]
``` 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * Примечание: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.используется только для возврата самого графика.

Использование цикла

Предполагая, что вы ищете более обобщенный метод, который мог бы работать для списка любой длины, мы можем автоматизировать создание строкиразрывы между участками с использованием цикла.Обратите внимание, что results="asis" требуется в заголовке блока:

```{r, fig.cap=c("Caption 1", "Caption 2"), echo=FALSE, results="asis"} 

for(plots in listOfPlots){
  print(plots)
  cat('\n\n') 
}

``` 

enter image description here

В качестве заключительного совета вы можете использовать имясписок прямо в подписи.Синтаксис {r, fig.cap = names(listOfPlots)} сможет достичь этого.

...