如何在LaTeX文档中包含复杂的R图?

时间:2011-01-24 03:02:32

标签: pdf r latex sweave

我遇到以下代码段的问题:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{myscatterplot.pdf}
\end{document}

其中“myscatterplot.pdf”由R中的以下代码生成:

library(scatterplot3d)
pdf("myscatterplot.pdf")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

问题在于,使用texworks(pdfLatex + makeindex + bibtex)进行编译时生成的LaTeX文档具有图形轴,但绘图或轴标签中没有任何点(在这种情况下,它只是3d轴本身)。 R或LaTeX不输出错误或警告消息。 我正在使用:

  • Windows 7上的R 2.12.1,
  • MiKTeX 2.8,
  • TEXworks的
  • Adob​​e Reader 9(不确定是否这样 有关...)

我已经能够使用\ includegraphics命令包含该图的png版本,并用adobe打开“myscatterplot.pdf”,在我的文档中显示我想要的数字。

我曾尝试使用tikz软件包作为解决方法,但似乎scatterplot3d生成了太多信息,由于内存大小,生成的图形无法包含在乳胶文档中(错误(我的实际情节将有10000) +分!)。

我怀疑问题是由于“.pdf”文件中的字体造成的,但我尝试使用

更改pdf字体
pdf("changefont.pdf")
par(family = "Helvetica")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

使用\ includegraphics(changefont.pdf)时的结果完全相同。

我正在考虑的另一个可能的问题是,scatterplot3d输出实际上可能是多个图像,而\ includegraphics只是从pdf文件中获取第一个数字(轴)。在这种情况下,我仍然不确定如何解决它。

我真的很感谢一种解决方法,因为我最终希望用Sweave完成所有这一切,这让我对包装的其他优美输出感到痛苦!

提前感谢您的回复。

编辑1:

因此,第一个建议是使用EPS格式而不是pdf。这产生了一些结果,但不是我想要的结果。我运行了以下内容:

\documentclass{article}
\usepackage{graphicx,epstopdf}
\begin{document}
\begin{figure}
\includegraphics[angle = 270, width= 6in, keepaspectratio=true]{change.eps}
\end{figure}
\end{document}

我使用

生成了“change.eps”
postscript("change.eps")
scatterplot3d(rnorm(100), rnorm(100), 1:100, highlight.3d = TRUE)
dev.off()

这个确实产生了一个改进(尽管奇怪的是,它在乳胶输出中顺时针旋转了90度!),我现在有了散点图中的轴和点在我的乳胶输出!但是,即使我使用ghostview打开了“change.eps”,轴标签仍然没有出现在图中!似乎scatterplot3d输出数字的方式与\ includegraphics搜索数字的方式不一致......

所以,我仍然在寻找一个包含轴标签的解决方案。

6 个答案:

答案 0 :(得分:5)

查看使用您列出的命令生成的myscatterplot.pdf,轴和标签就在那里。但是,pdf相当大(7英寸x 7英寸)。

如果你使用pdf()的重量/身高参数会有帮助吗?

pdf("myscatterplot.pdf", height=3.5, width=3.5)

答案 1 :(得分:4)

这是与LaTeX超出其可用内存相关的附注。

我刚用tikzDevice的例子来做一些压力测试,看起来结果很大程度上取决于使用哪个TeX引擎。特别值得注意的是luatexpdftex的后继者,证明能够处理具有许多图形元素的图。

  • pdflatex

    通过1000点积累,超过记忆并在10,000点死亡。

  • xelatex

    也超过记忆而死于10,000点。

  • lualatex

    在~45秒内咀嚼10,000点并产生1 MB的PDF文件。在~7.5分钟内登录100,00点(一个10 MB的输入文件),吐出一个8.5 MB的PDF文件,达到~750 MB的内存使用率。没有尝试100万基准。

看起来pdftexxetex在程序登陆时预先分配所有内存,这就是他们将获得的全部内容。另一方面,luatex似乎可以动态分配内存,因此只受可用RAM量的限制。

因此,如果pdflatex给您“内存不足”错误,请尝试lualatex进行旋转!


这些测试是使用TeX Live 2010发行版中包含的TeX编译器完成的。我也是tikzDevice

的作者之一

答案 2 :(得分:3)

您可以尝试Sweave:http://www.statistik.lmu.de/~leisch/Sweave/(Sweave是一个允许嵌入R代码以在乳胶文档中进行完整数据分析的工具)

答案 3 :(得分:1)

如果你想在你的文件中插入pdf图像,我认为你必须使用pdflatex而不是标准乳胶。如果没有安装,我会尝试从R生成eps格式的数字,而不是pdf。

答案 4 :(得分:1)

我回忆起类似问题的挣扎。不记得我是否能在图中看到标签。回顾一下代码,我在R级修改了两个参数:

par(xpd=NA)
par(oma=c(3, 3, 0, 0))

也适用于postscript,以便不将图形旋转90度:

postscript(file="xx.eps", horizontal=FALSE)

HTH

答案 5 :(得分:1)

我实际上遇到了完全相同的问题(TexWorks,pdfLatex,Windows 7)。我发现了一些有趣的东西:当我第一次启动Latex时,数字出现了轴和所有,当我重新运行pdfLatex时,轴再次消失。这给了我一个预感,我想出来了:即使乳胶预览没有显示轴,PDF格式也是如此。而且您甚至不必告诉\includegraphics命令图形是PDF格式。

pdf("C:/Users/Orr/Documents/Leiden University/Master thesis/Chapters/Images/bioRes/Boxplots mouse raw data.pdf")
boxplot(mouse_data_raw,main="Mouse raw data")
dev.off()

\begin{figure}[t]
\includegraphics[scale=0.5]{mouse-box-raw}
\includegraphics[scale=0.5]{human-box-raw}
\end{figure}