将R图绘制到LaTeX中?

时间:2009-12-11 19:06:56

标签: graphics r latex vector-graphics

我是R和LaTeX的新手,刚刚发现如何使用R绘制标准时间序列图并将其保存为png图像。我担心的是将它保存为图像然后将其嵌入到LaTeX中将会扩展它并使其看起来很难看。

有没有办法让R的plot()函数输出矢量图形并将其嵌入到LaTeX中?我是两个人的初学者所以请温柔:)代码片段非常感谢!

4 个答案:

答案 0 :(得分:56)

我建议使用tikzDevice包来生成包含在LaTeX文档中的输出:

http://cran.r-project.org/web/packages/tikzDevice/index.html

tikzDevice将R中生成的图形转换为可由LaTeX包tikz解释的代码。 TikZ为LaTeX提供了一个非常好的矢量绘图系统。 TikZ输出的一些很好的例子位于:

http://www.texample.net/

tikzDevice可以像任何其他R图形设备一样使用:

require( tikzDevice )

tikz( 'myPlot.tex' )

plot( 1, 1, main = '\\LaTex\\ is $\\int e^{xy}$' )

dev.off()

请注意,LaTeX宏中的反斜杠必须加倍,因为R将单个反斜杠解释为转义字符。要在LaTeX文档中使用绘图,只需包含它:

\include{path/to/myPlot.tex}

pgfSweave包中包含Sweave功能,可以为您处理上述步骤。确保您的文档在LaTeX前言中的某处包含\usepackage{tikz}

http://cran.r-project.org/

tikz()相比,pdf()功能的优点是:

  • 图中的标签和标题字体始终与LaTeX文档中使用的字体相匹配。这为您的文档提供了统一的外观。

  • 您可以使用LaTeX排版机的所有功能来创建数学注释,并且可以在图形文本中使用任意LaTeX代码。

tikz()功能的缺点是:

  • 处理包含大量组件的图表不能很好地扩展。这些是persp()大型基质图。图形元素的剪切数量可能导致LaTeX慢慢爬行或内存不足。

  • 该软件包目前已标记为测试版。这意味着如果作者找到令人信服的理由,包的界面或功能可能会发生变化。

我应该通过声明我是tikzDevicepgfSweave套餐的作者来结束这篇文章,所以我的观点可能有偏见。但是,我在去年使用这两个软件包编写了几份学术报告,对结果非常满意。

答案 1 :(得分:53)

Shane是现货,你确实想要Sweave。最终

作为一个新手,你最好分开任务。为此,请执行以下操作:

  1. 打开设备:pdf("figures/myfile.pdf", height=6, width=6)
  2. 绘制您的R对象:plot(1:10, type='l', main='boring') - 并且请记住,格子和ggplot需要在print周围显式plot
  3. 重要:关闭您的设备:dev.off()以完成文件。
  4. 可选:检查pdf文件。
  5. 在LaTeX中
  6. ,在文档标题中使用usepackage{graphicx},使用
    \includegraphics[width=0.98\textwidth]{figures/myfile}包含之前创建的图形,并注意文件扩展名是可选的。
  7. 通过pdflatex运行并享受。

答案 2 :(得分:22)

您可能需要考虑使用Sweave。在Sweave网站(以及其他地方)上有很多很好的文档可供使用。它的语法非常简单:只需将您的R代码放在<<>>=@之间。

这是一个结束looking like this的简单示例:

\documentclass[a4paper]{article}

\title{Sweave Example 1}
\author{Friedrich Leisch}

\begin{document}

\maketitle

In this example we embed parts of the examples from the
\texttt{kruskal.test} help page into a \LaTeX{} document:

<<>>=
data(airquality)
library(ctest)
kruskal.test(Ozone ~ Month, data = airquality)
@
which shows that the location parameter of the Ozone 
distribution varies significantly from month to month. Finally we
include a boxplot of the data:

\begin{center}
<<fig=TRUE,echo=FALSE>>=
boxplot(Ozone ~ Month, data = airquality)
@
\end{center}

\end{document}

要构建文档,您只需拨打R CMD Sweave file.Rnw或从R中运行Sweave(file)即可。

答案 3 :(得分:3)

这是一个我无法找到的关于SO的问题。

但: http://r-forge.r-project.org/projects/tikzdevice/ - 来自r的tikz输出 和 通过sweave http://www.rforge.net/pgfSweave/ tikz代码。

使用tikz将使您看起来与文档的其余部分一致,而且它将使用latex来排版图形中的所有文本。

修改 Getting LaTeX into R Plots