我对R和LaTeX都是新手,在最近学会了如何使用R绘制标准时间序列图并将其保存为PNG图像。 我担心的是,将其保存为图像,然后将其嵌入到LaTeX中会缩放它并使其看起来很丑陋。
有没有办法使R的plot()
函数输出矢量图形,并将其嵌入到LaTeX中? 我在这两个方面都是一个完全的新手,请温柔一点 :) 非常感谢提供代码片段!
我对R和LaTeX都是新手,在最近学会了如何使用R绘制标准时间序列图并将其保存为PNG图像。 我担心的是,将其保存为图像,然后将其嵌入到LaTeX中会缩放它并使其看起来很丑陋。
有没有办法使R的plot()
函数输出矢量图形,并将其嵌入到LaTeX中? 我在这两个方面都是一个完全的新手,请温柔一点 :) 非常感谢提供代码片段!
建议使用tikzDevice
包在LaTeX文档中生成输出:
http://cran.r-project.org/web/packages/tikzDevice/index.html
tikzDevice将在R中生成的图形转换为可以被LaTeX包tikz
解释的代码。TikZ为LaTeX提供了一个非常好的矢量绘图系统。一些良好的TikZ输出示例位于:
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}
。
tikz()
函数相比于pdf()
的优点有:
图形标签和标题的字体始终与LaTeX文档中使用的字体相匹配。这为您的文档提供了统一的外观。
您可以使用任意的LaTeX代码来创建数学注释,并使用LaTeX排版器的所有功能在您的图形文本中使用它。
tikz()
函数的缺点是:
它不适合处理具有许多组件的图,例如大矩阵的persp()
图。大量的图形元素可能会导致LaTeX变得非常缓慢或耗尽内存。
该软件包目前被标记为beta版。这意味着如果作者找到充分的理由更改界面或软件包功能,则接口或功能可能会发生变化。
我应该在这篇文章中声明,我是tikzDevice
和pgfSweave
软件包的作者,因此我的意见可能存在偏见。然而,我在过去一年中使用了这两个软件包来制作多篇学术报告,并对结果非常满意。
Shane说得好,你确实需要Sweave。但是对于新手来说,你可能更适合分离任务。因此,请按照以下步骤操作:
pdf("figures/myfile.pdf", height=6, width=6)
。plot(1:10, type='l', main='boring')
-- 请记住,lattice和ggplot需要在plot周围显式使用print
。dev.off()
以完成文件。usepackage{graphicx}
,使用\includegraphics[width=0.98\textwidth]{figures/myfile}
将之前创建的图形包含进来,注意文件扩展名是可选的。\usepackage{graphicx}
放在文档头中才能运行(在这里找到:http://tuxmann.blogspot.com/2006/06/latex-snippets-add-image-wrap-long.html);并且`with=0.98`缺少一个“d”。 - agentofuserHmisc
包中latex()
函数的替代品,用于绘图?也就是说,有没有类似的函数可以自动准备好\includegraphics
和"capture"等环境,以避免手动编写这些代码。 - Anton Tarasenkopostscript(file=myfile.ps,horizontal=FALSE)
。 - Willem你也许会考虑使用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 CMD Sweave file.Rnw
或在R内运行Sweave(file)
即可。
这是一个重复的问题,我在SO上找不到。
但是: http://r-forge.r-project.org/projects/tikzdevice/ -- 从R生成tikz输出 和 http://www.rforge.net/pgfSweave/ -- 通过sweave生成tikz代码。
使用tikz可以让你的图表外观与文档中的其余部分保持一致,此外它会使用latex排版图表中的所有文本。
编辑 将LaTeX嵌入R图表
tikzpicture
放入figure
环境中的\resizebox
中,请使用\input{path/to/myPlot}
,因为\include{}
会在前后执行\clearpage
。 - Richard\LaTex
是未定义的cs(对于外行人来说应该是\LaTeX
)。虽然我无法修复它,因为这只是一个微小的编辑。 - Arch Stanton