sweave和ggplot2:完全没有生成pdf文件

13

我试图创建一个包含使用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的透明度问题,但没有任何帮助。我也尝试了relaxed包,但也没有帮助。顺便问一下,decumar包有什么新消息吗?


1
Decumar在过去的几天里一直在进行大量开发,现在可能已经接近可以发布的点了。 - hadley
太棒了!这让我一整天都开心。我真的很期待测试它! - Matt Bannert
3个回答

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图形。


谢谢,开始总是最难的... 以前从没这么想过,因为我只是用了qplot()和ggsave。 - Matt Bannert

3

您需要将其包装在print()中,以使其在Sweave中正常工作。


1

实际上,虽然之前的两个答案都是正确的,但你的问题是另外一个。

你需要确保整个代码块在页面的左侧(除了函数缩进)。我不知道为什么,但这会导致Sweave出现问题。

在确保所有代码(以及代码块的页眉/页脚)都在页面的左侧(并添加打印语句)之后,你的示例对我有效。

顺便说一下,今天我学到了在sweave文档中可以在代码周围创建环境(我之前不知道,这将节省我很多时间)。好老的stackoverflow,在回答问题时甚至还能教你一些新东西!

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接