38

在 knitr 中,可以通过简单地在块选项中指定绘图的大小来指定它。

例如:

```{r, fig.width=9,fig.height=3}
plot(x)
```

我希望能够根据x. 假设 x 是一个 data.frame:

x <- data.frame(x=factor(letters[1:3]),y=rnorm(3))

例如,假设我想将 fig.height 调整为等于length(unique(x$x))

4

3 回答 3

33

例如,您可以在另一个块中定义宽度,然后使用它

```{r,echo=FALSE}
x <- data.frame(x=factor(letters[1:3]),y=rnorm(3))
len = length(unique(x$x))
```


```{r fig.width=len, fig.height=6}

plot(cars)
```
于 2013-03-12T16:00:36.527 回答
13

我刚刚发现了一篇很棒的博客文章。

在 Michael J Williams 的博客上阅读更多信息——我无耻地盗取了代码,所以那里有更多细节。请记住将块选项设置为 results = "asis"。

假设您想使用循环输出一堆图,但您希望它们每个都有不同的大小。定义以下函数(同样,我只是在这里复制粘贴):

subchunkify <- function(g, fig_height=7, fig_width=5) {
  g_deparsed <- paste0(deparse(
    function() {g}
  ), collapse = '')

  sub_chunk <- paste0("
  `","``{r sub_chunk_", floor(runif(1) * 10000), ", fig.height=",
   fig_height, ", fig.width=", fig_width, ", echo=FALSE}",
  "\n(", 
    g_deparsed
    , ")()",
  "\n`","``
  ")

  cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE))
}

并使用这样的函数,定义您自己的图形大小:

```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) + 
  geom_line()
subchunkify(g, 10, 3)
subchunkify(g, 7, 7)
```

或者让数据定义尺寸:

```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) + 
  geom_line()
for (i in seq(2, 5)) {
  subchunkify(g, i / 2, i)
}
```

在帖子中,迈克尔警告您必须小心:

由于我们使用 results='asis',如果我们想从块中输出文本或标题或其他任何内容,我们必须使用原始 HTML,而不是 Markdown,并且我们必须使用 cat() 来执行此操作,而不是 print() . 例如:

g <- ggplot(economics, aes(date, unemploy)) + 
  geom_line()

cat('<h2>A Small Square Plot</h2>')
subchunkify(g, 3, 3)

再说一次,不是我的工作……请访问那篇可爱的博客文章以获取更多详细信息。希望这对你有用。

于 2017-11-16T21:30:16.263 回答
0

解决此问题的一种方法,特别是如果您想在循环中更改图形参数,

  1. 定义另一个块,一个执行循环的函数
  2. 分别在以下块中定义图形细节

    ```{r, echo=FALSE}
    testFunction <- function (parameter) {
        x <- data.frame(x=c(1:parameter), y=rnorm(parameter))
        g1 <- ggplot(data=x, aes(x=x, y=y)) + geom_point()
        print(g1)
    }
    ```
    
    
    ```{r fig.width=10, fig.height=6}
    testFunction(10)
    ```
    
    
    ```{r fig.width=5, fig.height=4}
    testFunction(4)
    ```
    
于 2014-11-04T07:10:50.297 回答