【问题标题】:Plots are empty using Sweave and Latex使用 Sweave 和 Latex 绘图为空
【发布时间】:2012-04-30 02:48:40
【问题描述】:

我想用我用 R 获得的图形制作一个报告。这里我向你展示我设计的 site_rose(site_ref)site_time_series(site_ref) 生成的两个图像。

但是在运行 sweave('Profile.Rnw') 并获得 Profile.tex 之后,我获得了 Profile-002.pdf 和 Profile-003.pdf 这最后两个文档的大小为 0KB。所以我得到了一份没有任何数字的 .pdf 报告。这里我给你看代码:

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}

\title{Anàlisi in situ emplaçament}
\author{Jonel Palou Visa}

\begin{document}
\maketitle
\begin{center}
<<fig=TRUE,echo=TRUE>>=
 site_ref <- site_time_series(site_ref,peaks=T,stationary=T)
@
\end{center}

\begin{center}
<<fig=TRUE,echo=TRUE>>=
site_rose(site_ref)
@

\end{center}

\end{document}

我想知道我为了绘制数字而调用的新设备是否存在问题,或者我的真正问题是什么。 这两个函数的代码都太大了,无法在此处显示,这些函数中没有任何额外内容,因为要获得图形,我只调用 plot(...)

【问题讨论】:

  • 吹毛求疵:明智的做法是使用TRUE 而不是TTRUE 是一个 R 常量,它代表您所针对的布尔值。 T 可以定义为你想要的任何东西。例如,T &lt;- FALSE 是一个有效的命令,会真正混淆你的代码。

标签: r sweave knitr


【解决方案1】:

如果没有您创建的两个函数的代码,仍然不清楚出了什么问题。但是,如果您使用latticeggplot2,而不是在来自ggplot2lattice 的对象上调用print。在命令行上,这些类型的绘图工作,因为 print 然后被隐式调用。所以:

print(site_rose(site_ref))

应该产生正确的结果。或者,您可以开始使用knitr 而不是Sweaveknitr 没有这个问题。一般来说,我建议使用knitr 而不是 Sweave。

【讨论】:

  • @Paul Hiemstra:非常感谢您的回答。巧合的是,我只是在 RStudio 中编译 PDF 时遇到问题,而且我没有包含 print(p) 的事实,其中 p 是我由函数 ggplot 生成的情节是罪魁祸首。
  • @Jonel_R,你在哪里使用 ggplot 或 lattice?打印对象是否解决了问题?
  • @Jubbles,你也可以使用 knitr,它在打印时没有这个问题。在许多其他方面,包括语法,是 Sweave,但更好。
  • 我既没有使用 ggplot 也没有使用 lattice。在 site_time_series 和 site_rose 中实现的命令很简单:plot.new() 和 plot(x.....)
【解决方案2】:

这是整个 Sweave 文件吗?创建 Sweave 文档时,您将无法重用当前环境变量中定义的变量。 Sweave 的全部意义在于从端到端重现一些分析,因此无论如何这都不是一个好方法。

我建议在此 Sweave 文档中包括生成 site_ref 变量所需的任何分析。

如果您坚持走捷径,您可以保存当前的 R 环境并将其作为 Sweave 文档中的第一个命令加载,以提供对这些变量的访问。

使用Stangle 从您的 Sweave 文档中提取 R 代码,然后创建一个新的 R 会话并尝试运行该代码。您可能会收到有关未定义变量的错误,或有关未定义函数的消息。您应该能够在空环境中运行 Sweave 文档中包含的 R 代码并使其成功运行。然后您就可以将其呈现为 PDF。

【讨论】:

  • 对不起,我没有很了解你。我与我的 site_ref 变量到底有什么关系?
  • 在您的第一个代码块中,您使用变量site_ref。您从未在此脚本中定义 site_ref。因此,您可能正在尝试绘制一个不存在的变量(这只会给您一个空图或错误)。最好将所有代码包含在 Sweave 文档中,包括创建此类变量(和自定义函数)所需的任何内容。 Sweave 脚本应该是完全独立的,不需要预定义的变量或预加载的库。
  • 不,这是整个代码的一部分。在第一行中,我已经删除了 site_ref。这不是变量的问题。但我仍然想知道为什么 kintr 有效而 sweave 无效。
  • 您还在site_ref 的声明中引用了site_refsite_ref &lt;- site_time_series(**site_ref**,peaks=T,stationary=T)。我还没有机会玩 KnitR,所以我不确定那里的差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多