RMarkdown: 循环使用同一块中的多个ggplots

4

我正在尝试在RMarkdown文档的单个代码块中使用for循环生成多个ggplot2图。

当我硬编码生成两个图形的代码时,图形按预期渲染。请参见我的代码标题为“Hardcoded Method”的部分。

但是,当我将两个图的参数加载到列表中并循环遍历该列表时,这些图形未显示出来。我也没有看到任何错误。请参见我的代码标题为“Loop Method”的部分。

请问有人可以告诉我发生了什么以及如何修复它吗?谢谢。

  • Karthik。

这是我的代码:

---
title: "Test for multiple plots"
author: "KC"
date: "4/3/2020"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# Hardcoded Method

Sample Plot - One plot at a time 

```{r Multiple Plots separately listed, echo=TRUE, fig.keep="all"}
library(ggplot2)
library(datasets)

combo = c("temperature", "pressure")
ggplot(pressure, 
       mapping=aes(x=base::get(combo[1]), y=base::get(combo[2]))) + 
  geom_point() + 
  labs(x=combo[1], 
       y=combo[2], 
       title=paste("Hardcoded Method:", paste(combo, collapse=" vs ")))

combo = c("pressure", "temperature")
ggplot(pressure, 
       mapping=aes(x=base::get(combo[1]), y=base::get(combo[2]))) + 
  geom_point() + 
  labs(x=combo[1], 
       y=combo[2], 
       title=paste("Hardcoded Method:", paste(combo, collapse=" vs ")))

```

# Loop Method

Now, I use a loop method to generate the same plots.  

```{r Multiple Plots in a loop, echo=TRUE, fig.keep="all"}
library(ggplot2)
library(datasets)
combos = list(c("temperature", "pressure"), c("pressure", "temperature"))

for (combo in combos) {
  # combo = combos[[1]]
  print(paste("Plotting", paste(combo, collapse=" vs ")))
  ggplot(pressure, 
         mapping=aes(x=base::get(combo[1]), y=base::get(combo[2]))) + 
    geom_point() + 
    labs(x=combo[1], 
         y=combo[2], 
         title=paste("Loop Method:", paste(combo, collapse=" vs ")))
}

```
1个回答

7
使用Markdown文件中的for循环时,需要显示调用print()以输出图形。 因此,以下代码将无效:
for (i in length(x)) {
    ggplot(...)
}

您需要将其转换为类似于这样的格式:

for (i in length(x)) {
    p <- ggplot(...)
    print(p)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接