如何在R中压缩用于Sweave的图?

时间:2013-07-15 18:44:38

标签: r plot sweave

我在Sweave报告中有几个图像,如下所示:

enter image description here

它们是由具有类似于此的代码的函数创建的:

<<fig = T>>=
barplot(prop.table(table(x, y), margin = 2) * 100,
        border = F, xlab = '', ylab = '', las = 2)
@

我想压缩y轴,所以我的情节看起来像这样(没有标签失真):

enter image description here

我能够得到这个的唯一方法是使用带有自定义高度参数的png(),然后使用LaTeX上的图像文件,但这样就破坏了Sweave的整个目的。如何在barplot()(或使用par()或其他优雅解决方案)中实现此目标?

1 个答案:

答案 0 :(得分:3)

对于图像的尺寸,Sweave具有块选项widthheight。它不会控制最终渲染PDF中的绘图有多大,因为它是LaTeX控制的东西,但它确实控制了数字本身的创建。

来自Sweave Manual [pdf]:

  

注意:容易混淆的一件事是R的width / height参数   图形设备和LaTeX \includegraphics命令的相应参数。   Sweave选项widthheight将传递给R图形设备,从而影响   生成的EPS和PDF文件的默认大小。它们不会影响文档中图形的大小,默认情况下它们始终是当前文本宽度的80%。使用\setkeys{Gin}修改数字大小或将明确的\includegraphics命令与Sweave选项include=FALSE结合使用。

同时阅读

require("utils")
?RweaveLatex

也有详细信息。

对于您引用的示例,widthheight都是6,默认值。所以你可以做类似

的事情
<<fig=TRUE, width=8, height=5>>=
barplot(prop.table(table(x, y), margin = 2) * 100,
        border = FALSE, xlab = '', ylab = '', las = 2)
@

获得所需的比例。

[不要使用FT - 您要求麻烦!]

但是,请注意手册或?RweaveLatex所说的内容。默认情况下,一旦进入LaTeX,图像的宽度将等于0.8\textwidth。因此,您可能还希望将每个块的宽度明确设置为创建的图形的大小,例如

\setkeys{Gin}{width=8in}
<<fig=TRUE, width=8, height=5>>=
barplot(prop.table(table(x, y), margin = 2) * 100,
        border = FALSE, xlab = '', ylab = '', las = 2)
@
%% reset if you want
\setkeys{Gin}{width=0.8\textwidth}

所以你必须管理两个设置:

  1. sweave chunk选项widthheight控制EPS或PDF文件(或两者)的创建
  2. \setkeys{Gin}控制使用LaTeX处理时包含图的宽度。