70

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

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

4

4 回答 4

63

我会推荐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 缓慢爬行或内存不足。

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

我应该以声明我是 thetikzDevicepgfSweavepackages 的作者来结束这篇文章,所以我的意见可能有偏见。但是,我在去年使用这两个软件包制作了几份学术报告,并且对结果非常满意。

于 2009-12-12T07:02:21.547 回答
59

Shane 很准,你确实想要 Sweave。最终。

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

  1. 打开设备: pdf("figures/myfile.pdf", height=6, width=6)
  2. 绘制你的 R 对象: plot(1:10, type='l', main='boring') ——记住 lattice 和 ggplot 需要一个明确的printaround plot
  3. 重要:关闭您的设备:dev.off() 完成文件。
  4. 可选:检查 pdf 文件。
  5. 在 LaTeX 中,usepackage{graphicx}在文档标题中使用
    \includegraphics[width=0.98\textwidth]{figures/myfile} ,用于包含之前创建的图形,并注意文件扩展名是可选的。
  6. 运行pdflatex并享受。
于 2009-12-11T19:59:55.250 回答
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)

于 2009-12-11T19:12:31.760 回答
3

这是我找不到的关于 SO 的问题的欺骗。

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

使用 tikz 将使您看起来与文档的其余部分保持一致,此外,它将使用 Latex 排版图表中的所有文本。

编辑 将 LaTeX 放入 R 图中

于 2009-12-11T21:48:33.060 回答