正在用谢益辉大人的knitr,结合ggplot2写自动化输出图片的程序。现在遇到这样一个问题。一般的做法是,在chunk中利用fig.width,fig.height提前设置输出图的大小
我遇到的问题是:如果利用ggplot2中的facet_wrap函数,可以一次输出多个子图形。但是当输出的子图形数量过多时,根据提前设置好的fig.width,fig.height输出的图中,每个子图就会很小,甚至看不清楚。
我现在的想法是,提前判断生成的图中包含多少个子图,然后动态调整输出图的大小。
但是不知道该如何做,还请各位高手指点。谢谢!
在输出过程中,动态设置输出图片的大小?
代码段选项可以来自于动态的计算,而不是固定的值,参见示例:
https://github.com/yihui/knitr-examples/blob/master/040-grid-table.Rnw
已经看了,解决大问题了!感谢!
还是遇到了问题。由于图的label中有中文,通过knitr编译会有很多warning,影响速度,上次您给了一段代码:
options(device = function(file, width, height, ...) {
png(tempfile(), width = width, height = height, units = 'in', res = 600, ...)
})
加入这段代码后,不会出现warning了。
按照您给的例子,加入如下代码调节图形大小:
fig.width=convertWidth(unit(nlevels(Generation)*9.6,"inches"),"inches",valueOnly=TRUE)
会出现错误提示
“geometry(width, height, units, res): 缺少参数"width",也没有缺省值”
删除options设置那段代码就好了
第二个问题:如何将fig.width=convertWidth(unit(nlevels(Generation)**9.6,"inches"),"inches",valueOnly=TRUE)嵌入R代码循环中?
在每个循环中个,generation的level数都是变化的。我需要根据每个循环产生的level数设置图形大小。
这是照猫画猫啊……你根本不需要convertWidth等函数,我给的例子的意思是你可以通过计算的方式赋值给fig.width等选项,不是说非得通过convertWidth函数计算得到,你这个情况里完全可以用fig.width = nlevels(Generation)*9.6
第二个问题说起来太费事了,我没时间给你直接答案,参见例子069: https://github.com/yihui/knitr-examples
回复 第5楼 的 谢益辉:我是病急乱投医啊,[s:12]我改。
哪位高手愿意把这段rnw代码帮我翻译成rmd代码?我latex不懂,非常谢谢!
<br />
\section{Now i is \Sexpr{i}}</p>
<p>\Sexpr{''}<<\Sexpr{paste('arbitrary-chunk-label-', i, '-here', sep = '')}>>=</p>
<p>print (\Sexpr{i})<br />
iris[\Sexpr{i}, ]<br />
boxplot (iris[, \Sexpr{i}] ~ iris$Species)<br />
@<br />
</p>刚才察看了 \Sexpr{}是行内代码.直接写为rmd中对应的行内代码就可以了。
我现在遇到的问题是如何生成模版中chunk的名字,如果模版的名字不变,那么图片的名字都会相同。因此运行后,画出的图都是最后一副图。
问题已经解决:需要在一开始就用行内代码.