最近不太会起标题了,总是起的很长。
问题:当我们在写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之后的结果