让R绘图进入LaTeX?


69

我是R和LaTeX的新手,最近才发现如何使用R绘制标准时间序列图并将其另存为png图像。我担心的是将其另存为图像,然后将其嵌入到LaTeX中会缩放它并使它看起来丑陋。

有没有办法让R的plot()函数输出矢量图形并将其嵌入LaTeX?我都是这两者的初学者,所以请保持谦虚:)代码片段非常受赞赏!

Answers:


58

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并享受。

7
我还应该提到,像Dirk所做的那样将任务分开对于大型文档可能是有益的:每次都要从头开始重建整个文档可能会很痛苦,更不用说调试大型Sweave文档的痛苦了。
Shane

1
尽管有缓存技巧和软件包。但是,可以肯定的是,就复杂性和不透明性而言,Sweave的功能要付出一些代价。
坦率

1
谢谢!您可能会用我遇到的一些问题来更新您的答案,这样可能会对其他像我这样的新手更容易:您已经\usepackage{graphicx}输入了要运行的文档标头(在此处找到:tuxmann.blogspot.com/2006/06 /…);并且您错过了“ d”with=0.98
Helder S Ribeiro 2009年

latex()Hmisc地块有替代方案吗?也就是说,有些东西是\includegraphics用环境,“捕获”等准备的。因此,请避免手动编写此代码。
安东·塔拉森科

混合使用pdf不适用于我,因为我需要后处理(pdf给了我一个边界框错误)。这对于其他人也可能是一个问题。事实证明,解决方案很简单-让R创建.ps而不是.pdf:postscript(file=myfile.ps,horizontal=FALSE)
Willem 2014年

60

我建议将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可以为您完成上述步骤的功能。确保您的文档包含\usepackage{tikz}在LaTeX序言中的某处。

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

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

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

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

tikz()功能的缺点是:

  • 它无法很好地缩放以处理包含许多组件的图。这些是诸如persp()大型矩阵图之类的东西。图形元素的剪切数量可能会导致LaTeX缓慢爬行或耗尽内存。

  • 该软件包当前标记为Beta。这意味着,如果作者发现令人信服的理由,则可能会更改软件包的接口或功能。

在结束本帖子时,我应声明我既是tikzDevicepgfSweave包的作者,也可能对我的观点产生偏见。但是,我去年使用这两个软件包制作了几份学术报告,并对结果非常满意。


3
+1优秀的帖子和非常酷的项目!我会将pdf答案保持为“可接受”,因为它对新手来说比较容易,但是我正在尝试使用您的pdf答案。除了LaTeX之外,我还需要指定include什么吗?收到此错误:Environment tikzpicture undefined
Helder S Ribeiro 2009年

抱歉,我应该更清楚地表明您需要tikz在LaTeX文档中使用该软件包。帖子已编辑。
Sharpie

大包装!对我来说,这是我安装的第一个R软件包,花了我一段时间才知道如何做。对于下一个人:使用install.packages()R中的 命令-简单!@Sharpie,我将对如何使R CMD install tikzDevice命令起作用感兴趣(我为此苦了一段时间,“缺少目标文件操作数”错误)
Tom

R CMD INSTALL如果您使用了其他软件包管理器,则@Tom会引起误解-您必须将其指向您自己下载的文件。因此missing destination file。要为您下载软件包,请install.packages从R内部使用
。– Sharpie

2
看来tikzDevice是 已从官方CRAN存储库中删除。我按照本指南进行安装。
saffsd

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}

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


2
我第二次编织。我只想补充一点,RStudio与Sweave具有出色的集成,这对于初学者可能特别重要(安装LaTeX发行版并单击RStudio中的一个按钮)。
克里斯·比利

@ChrisBeeley您可以删除一些解释RStudio和LaTeX集成的链接吗?谢谢。
Wakan Tanka


我没有得到任何绘制如情节在这里,为什么呢?与损坏的MWE相关的问题在这里
hhh

3

这是我找不到的关于SO的问题的虚假记载。

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

使用tikz将使您的外观与文档的其余部分保持一致,此外还将使用乳胶对图形中的所有文本进行排版。

编辑将 LaTeX放入R图


2
这个问题与这个问题相反:在这里,OP正在询问如何将R绘图添加到LaTeX文档中。在那里,OP正在询问如何将LaTeX方程添加到R图中。
Shane

标题是故意的措辞:)
Helder S Ribeiro

确实足够,但答案不尽相同;)
云母

不完全是,这完全取决于您要创建的最终产品。LaTex into R使用LaTex元素制作图,而R into Latex创建包括R图的laTex文档。
弗朗西斯·斯玛特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.