将R图绘制到LaTeX中?

Hel*_*iro 67 graphics latex r vector-graphics

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

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

Sha*_*pie 59

我建议使用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()
Run Code Online (Sandbox Code Playgroud)

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

\include{path/to/myPlot.tex}
Run Code Online (Sandbox Code Playgroud)

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

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

tikz()功能的优点 pdf()是:

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

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

tikz()功能的缺点是:

  • 它不能很好地处理具有大量组件的图.这些是诸如persp()大型matricies的情节之类的东西.图形元素的剪切数可能导致LaTeX慢速爬行或内存不足.

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

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

  • +1优秀的帖子和非常酷的项目你有!我将pdf答案保持为"已接受",因为它对新手来说更容易,但我正在尝试你的.除了`include`之外,我还需要在LaTeX方面指定什么吗?得到这个错误:`环境tikzpicture undefined`. (3认同)
  • 似乎tikzDevice [已从官方CRAN存储库中删除](http://cran.r-project.org/web/packages/tikzDevice/index.html).我按照[本指南](http://lightonphiri.org/blog/r-graphical-representation-installing-tikzdevice-package)进行安装. (2认同)

Dir*_*tel 56

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中,usepackage{graphicx}在文档标题中使用,
    \includegraphics[width=0.98\textwidth]{figures/myfile} 用于包含之前创建的图形,并注意文件扩展名是可选的.
  6. pdflatex过去享受.

  • 我还要提到的是,将任务分离为Dirk已经完成的任务对于非常大的文档都是有益的:每次从头开始重建整个文档都会很痛苦,更不用说调试大型Sweave文档的痛苦了. (7认同)

Sha*_*ane 22

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

这是一个简单的例子,最终看起来像这样:

\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}
Run Code Online (Sandbox Code Playgroud)

要构建文档,您只需在R中调用R CMD Sweave file.Rnw或运行即可Sweave(file).

  • 我第二次发誓.我只想补充一点,RStudio与Sweave有很好的集成,这对于初学者来说可能特别重要(安装LaTeX发行版并点击RStudio中的一个按钮). (2认同)