单个块内的可变绘图高度

时间:2015-12-04 09:18:06

标签: r ggplot2 knitr

以下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")

})
```

2 个答案:

答案 0 :(得分:2)

一种方法是创建每个图像并将其作为外部图像包含在文档中。你可以使用"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)))
```

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

答案 1 :(得分:0)

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
```