我在Sweave报告中有几个图像,如下所示:
它们是由具有类似于此的代码的函数创建的:
<<fig = T>>=
barplot(prop.table(table(x, y), margin = 2) * 100,
border = F, xlab = '', ylab = '', las = 2)
@
我想压缩y轴,所以我的情节看起来像这样(没有标签失真):
我能够得到这个的唯一方法是使用带有自定义高度参数的png()
,然后使用LaTeX上的图像文件,但这样就破坏了Sweave的整个目的。如何在barplot()
(或使用par()
或其他优雅解决方案)中实现此目标?
答案 0 :(得分:3)
对于图像的尺寸,Sweave具有块选项width
和height
。它不会控制最终渲染PDF中的绘图有多大,因为它是LaTeX控制的东西,但它确实控制了数字本身的创建。
来自Sweave Manual [pdf]:
注意:容易混淆的一件事是R的
width
/height
参数 图形设备和LaTeX\includegraphics
命令的相应参数。 Sweave选项width
和height
将传递给R图形设备,从而影响 生成的EPS和PDF文件的默认大小。它们不会影响文档中图形的大小,默认情况下它们始终是当前文本宽度的80%。使用\setkeys{Gin}
修改数字大小或将明确的\includegraphics
命令与Sweave选项include=FALSE
结合使用。
同时阅读
require("utils")
?RweaveLatex
也有详细信息。
对于您引用的示例,width
和height
都是6
,默认值。所以你可以做类似
<<fig=TRUE, width=8, height=5>>=
barplot(prop.table(table(x, y), margin = 2) * 100,
border = FALSE, xlab = '', ylab = '', las = 2)
@
获得所需的比例。
[请不要使用F
和T
- 您要求麻烦!]
但是,请注意手册或?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}
所以你必须管理两个设置:
width
和height
控制EPS或PDF文件(或两者)的创建\setkeys{Gin}
控制使用LaTeX处理时包含图的宽度。