单个块内的可变地块高度

Variable plot height within single chunk

以下 knitr 东西通过 lapply 产生了多个图。因此,它们的数量和内容因前面的 R 代码而异。

有没有办法使用变量(比如给定条形图中最高条形的高度)单独设置每个图的图高度?

---
title: "Variable plot height"
output: word_document
---

Plots:

```{r, echo=FALSE, fig.height = 2}
library(ggplot2)
library(tidyr)

data(mtcars)
mtcars$car = row.names(mtcars)

cars = gather(mtcars[1:5, ], variable, value, 
              -c(car, mpg, disp, hp, qsec))

lapply(unique(cars$car), function(x) {

  ggplot(cars[cars$car == x, ], aes(variable, value)) + 
      geom_bar(stat = "identity")

})
```

一种方法是创建每个图像并将其作为外部图像包含到文档中。您可以使用 "asis" 的力量。这是一个小例子。

---
title: "Untitled"
author: "Neznani partizan"
date: "04. december 2015"
output: html_document
---

```{r, echo=FALSE, fig.height = 2}
library(ggplot2)
library(tidyr)

data(mtcars)
mtcars$car = row.names(mtcars)

cars = gather(mtcars[1:5, ], variable, value, 
              -c(car, mpg, disp, hp, qsec))

suppressMessages(invisible(lapply(unique(cars$car), function(x) {

  ggplot(cars[cars$car == x, ], aes(variable, value)) + 
      geom_bar(stat = "identity")
  ggsave(sprintf("%s.png", x))

})))
```

```{r results = "asis", echo = FALSE}
cat(sprintf("<img src='%s' alt='' style='width:350px;height:228px;'> <br />", 
            list.files(pattern = ".png", full.name = TRUE)))
```

在打印 HTML 代码时,可以使用 ggsave and/or 中的适当参数即时调整图像大小。

fig.widthfig.height 块选项可以接受多个值。在您的示例中,有五个图,因此通过为宽度和高度设置一个长度为 5 的数值向量,并保存 ggplot 个对象的列表,您可以让一个块在最终生成五个不同大小的图形文档。下面是一个 .Rmd 文件示例。

---
title: "Variable plot height"
output: word_document
---

Plots:

```{r, echo=FALSE}
library(ggplot2)
library(tidyr) 
data(mtcars)
mtcars$car = row.names(mtcars)
cars = gather(mtcars[1:5, ], variable, value, -c(car, mpg, disp, hp, qsec))

plots <- 
  lapply(unique(cars$car), function(x) { 
           ggplot(cars[cars$car == x, ], aes(variable, value)) + 
                 geom_bar(stat = "identity") 
                              })
widths  <- c(3, 4, 5, 3, 6)
heights <- c(3, 3, 3, 4, 3)
```

```{r show_plots, fig.width = widths, fig.height = heights}
plots
```