在rmd文件中自动改变图片的长度或者宽度

最近不太会起标题了,总是起的很长。

问题:当我们在写Rmd文件时,有时候会在一个loop循环里,或者各种apply程序中绘图,但是要求图片的高度和宽度自适应,也就是说依照数据的大小来由程序自动改变图片的长度或者宽度。扩展起来,就是改变任何一个chunk option选项.

我参考了几个网上的贴子,终于试出了自己的答案,下面是贴子的链接:
knitr: Changing chunk options like fig.height programmatically, mid-chunk
Plot size and resolution with R markdown, knitr, pandoc, beamer
knit-expand

答案:
以下是名为test.Rmd的内容

---
title: "qiuworld.com"
output: 
    html_document:
        fig_caption: yes
        self_contained: no
        toc: yes
---
```{r setup, include=FALSE}
library(knitr) #要载入knitr
opts_knit$set(progress=FALSE, verbose=FALSE) #这里的目的是防止输出进度以及提示至最终文件
opts_chunk$set(comment=NA, warning=FALSE, message=FALSE) #这里是一些基础设置
```
 
这里可以正常输出任何你想要的东西。
```{r dosomething}
x <- list(a=1:10, b=sample(1:100, 50))
y <- list(a=sample(1:10, 10), b=1:50)
```
 
下面的代码是关键部分
```{r expand, echo=FALSE}
kexpand<-function(x, y, id, cap, fh, fw){##参数按自己的需要设置
    code <- paste("```{r {{cap}},fig.cap='{{cap}}',fig.width={{fw}},fig.height={{fh}},dev=c(\"png\",\"pdf\"),echo=",
                  ifelse(id==1,"TRUE","FALSE"),
                  "}\n
plot(x, y)\n
```\n\n", sep="") ##这里需要提一句,我给dev设置多个值,可以让程序自动生成不同格式的多个图片。
    cat(knit(text=knit_expand(text=code)))
}
```
 
下面的代码用来画图
```{r plot,results='asis'}
for(i in 1:2){
    kexpand(x[[i]], y[[i]], id=i, cap=paste("fig", i, sep=""), fh=i*3, fw=i*3)
}
```

这里是转换成html之后的结果

Leave a Reply

  

  

  

%d 博主赞过: