sweave和ggplot2:根本没有生成pdf

时间:2010-07-21 22:29:46

标签: r ggplot2 sweave literate-programming

我正在尝试创建一个包含ggplot2完成的图形的sweave报告。虽然从长远来看我正在寻找一些环境 - 我只是在这里使用一个简单的.Rnw文件,它只包含代码和情节

 \documentclass[a4paper]{article}
 \SweaveOpts{echo=FALSE}
 \usepackage{a4wide}

  \begin{document}

  \begin{figure}[htbp]
  \begin{center}
 <<>>=
 library(ggplot2)
 x=rnorm(100)
 qplot(x)

 @
 \caption{My Graph}
 \end{center}
  \end{figure}
\end{document}

不幸的是没有创建图表,我只得到一个损坏的.pdf和.eps文件。虽然我得到了一个好的.tex文件,除了图形外似乎有用。 我使用以下基本代码来创建它:

 Sweave("myfile.Rnw")

我刚刚在网上找到了一些讨论透明度和sweave / ggplot2问题的老帖子,但没有任何可能有帮助的帖子。我也尝试了轻松的套餐,这也没有帮助。顺便问一下,decumar包装上有什么新闻吗?

3 个答案:

答案 0 :(得分:19)

qplot()生成对象,而不是图形输出。它可能看起来像你运行它时,但那是因为没有赋值,R会自动打印qplot()的输出。要将其集成到Sweave中,请在print()周围包裹qplot(),或将qplot()的输出分配给某个内容,然后将其包装在print()中。

...
<<fig = T, echo = F>>=
 library(ggplot2)
 x=rnorm(100)
 p <- qplot(x)
 print(p)
@
...

那应该有用。我一直在我的sweave文档中使用ggplot2图形。

答案 1 :(得分:3)

你必须将它包裹在print()以使其在sweave中工作。

答案 2 :(得分:1)

实际上,虽然之前的两个答案都是正确的,但您的问题还是别的。

您需要确保整个代码块位于页面的左侧(除了函数中的iundentation)。再一次,我不知道为什么,但这会导致Sweave出现问题。

确保所有代码(以及代码块的页眉/页脚)位于页面左侧(并添加打印语句)后,您的示例适用于我。

顺便说一句,我今天了解到你可以在sweave文档中创建一个围绕你的代码的环境(我不知道,这将节省我很多时间)。好旧的stackoverflow,即使你回答问题也会教你一些新东西!

希望这有帮助。