R,Latex,Sweave,ggplot2 - 更改ggplot尺寸

时间:2012-02-13 13:39:39

标签: r latex ggplot2 sweave

我正在制作一份R Sweave报告。我在sweave pdf输出中对ggplot维度有一些困难。我的代码:

\documentclass{report}

\begin{document}

demo demo demo demo demo demo demo demo demo demo demo demo 

\begin{figure}[h]
 \begin{center}
<<echo=FALSE, fig=TRUE>>=
require(ggplot2)
df <- data.frame(a= c(1:10), b = c (10:1))

ggplot(data = df, aes(a, b)) + geom_line()
@
  \caption{caption}
 \end{center}
\end{figure}

demo demo demo demo demo demo demo demo demo demo demo demo 

\end{document}

现在我想控制pdf输出中的绘图宽度和高度尺寸。实际上我想保持高度不变,但要使宽度与文字宽度相同。

感谢您的时间。

3 个答案:

答案 0 :(得分:6)

您可以尝试使用knitr包。 (完全披露:我是此软件包代码库的次要贡献者),它允许您指定out.width,它控制图的宽度。因此,您可以将代码块重写为

<<echo=FALSE, out.width = '0.9\\textwidth'>>=
suppressMessages(require(ggplot2))
df <- data.frame(a= c(1:10), b = c (10:1))
ggplot(data = df, aes(a, b)) + geom_line()
@

答案 1 :(得分:4)

非常感谢,拉姆纳特。 FWIW,我在这里粘贴完整的代码:

\documentclass{report}

\begin{document}

demo demo demo demo demo demo demo demo demo demo demo demo 

\begin{figure}[h]
<<echo=FALSE, fig.align='center', out.width='0.9\\textwidth', message=FALSE>>=
require(ggplot2)
df <- data.frame(a= c(1:10), b = c (10:1))
ggplot(data = df, aes(a, b)) + geom_line()
@
  \caption{caption}
\end{figure}

demo demo demo demo demo demo demo demo demo demo demo demo 

\end{document}

我添加了选项fig.align='center'以使图形居中(您不需要在LaTeX中使用\begin{center}\end{center},这有时可能会使文档中的意外内容居中对齐),{ {1}}来禁止来自message=FALSE的消息。

您可以通过以下方式编译文档:

require(ggplot2)

答案 2 :(得分:1)

查看R-Forge上提供的AFLP包中的ggsave.latex()函数

install.packages("AFLP", repos="http://R-Forge.R-project.org")

然后您的Sweave文件简化为此

\documentclass{report}

\begin{document}

demo demo demo demo demo demo demo demo demo demo demo demo 

<<echo=FALSE, results = tex>>=
require(ggplot2)
ggsave.latex <- AFLP:::ggsave.latex
df <- data.frame(a= c(1:10), b = c (10:1))
p <- ggplot(data = df, aes(a, b)) + geom_line()
ggsave.latex(p, filename = "myplot.pdf", width = 2, height = 10, caption = "Your caption")
@

demo demo demo demo demo demo demo demo demo demo demo demo 

\end{document}