使用循环生成每个块的多个绘图并对块选项进行矢量化(图高)

时间:2014-04-29 22:46:44

标签: r knitr

我试图使用循环在一个knitr块中生成多个图。这不是很难,我只需要在print()语句中包装每个绘图,knitr会自动生成适当的文件名,例如: chunkname1.pdf,chunkname2.pdf ...

但是,我的情节高度差异很大,我需要为每个情节指定fig.height。没问题,我只需指定一个高度向量(例如fig.height=c(7,9))。在这种情况下,knitr不那么明智地产生两个具有相同文件名的图形(最后一个覆盖第一个)。与Yihui's hack一致,我决定用fig.ext=paste0(c("A","B"),".pdf")对这两个案例进行矢量化。这种作品有效并产生高度为7的高度chunkname1.A.pdf和高度为9的chunkname2.B.pdf(它还会产生高度为9的chunkname1.B.pdf和高度为7的chunkname2.A.pdf

更糟糕的是,在后一种情况下,生成的tex输出错误地引用了chunkname1chunkname2,这当然无法找到。在Yihui的黑客中,他直接通过黑客名字引用生成的文件,这是我不在乎的事情。

那么,处理这个问题的“正确”方法是什么?文档让我相信fig.height在图形上进行了矢量化,但现在我看到它只是指输出设备,文件扩展名/路径等的组合,用于生成多个不同版本的相同情节。但是,即使knitr支持每个块的多个绘图,它也无法为指定本质上不同的绘图的不同属性提供任何帮助。

这让我得出两个结论之一:

  1. 应避免每个块的多个绘图,除非在简单的情况下(更喜欢在单独的块中指定绘图,并使用适当的块选项)。

  2. knitr可以通过对每个块的块选项和/或唯一图形进行矢量化来改进;例如正如我天真地预料的那样,fig.height=c(7,9)会将chunkname1.pdf的大小设为7,将chunkname2.pdf设置为9。如何做到这一点(基于我对output.R)的粗略检查,或者是否可能,我不清楚。

  3. 选项1显然存在缺陷(在我的用例中,我只在运行时指定了图或模型的数量,并且我想避免一系列缺失的绘图错误)。选项2似乎是更多R-ish做事的方式,如果不是不可能出于模糊的原因。那么,有没有办法在不同高度的每个块上完成多个绘图,或者这是knitr的bug / feature请求?

0 个答案:

没有答案