【问题标题】:Figure numbers generated by Sweave/R and why only (PDF)LaTeX由 Sweave/R 生成的数字以及为什么只有 (PDF)LaTeX
【发布时间】:2011-12-01 08:21:24
【问题描述】:

我在这里继续我之前的帖子:

Beginner's questions (figures, bibliography) with Sweave/R/LaTeX---my first document

工作代码在这里复制:

\documentclass[a4paper]{article}
\usepackage{Sweave}  %%%%%%
\begin{document}
<<echo=TRUE>>=
x <- rnorm(100)
xm <- mean(x)
xm
@

<<echo=FALSE>>=
x <- rnorm(100)
xm <- mean(x)
xm
@

<<echo=TRUE>>= 
##### Remove all comments from your data file 
test.frame<-read.table(file="apples.d",header=T,sep= "")
names(test.frame)
head(test.frame)
class(test.frame)
@

\begin{figure}[htbp]
\begin{center}
\setkeys{Gin}{width=0.5\textwidth}
<<echo=FALSE,fig=TRUE,width=4,height=4>>=
#### Must tell plot where to get the data from. Could also use test.frame$year
with(test.frame,plot(year,value))
@
\end{center}
\end{figure}
\end{document}

以上内容在RStudio(最新)和Tinn-R(最新)上运行良好,并且生成了所需的pdf文档。

问题:

  1. 如果我将上述文件命名为 goodex.snw 并运行 Sweave,我将获得带有 Tinn-RRStudio 的文件 goodex-004.pdf 作为绘图的 PDF 图像。为什么尾随004?这个可以改吗?

  2. 可以生成EPS 文件吗? Sweave编译成PDF的工具是不是只能通过(PDF)LaTeX而不是通过传统的DVI>PS>PDF路线?

  3. 只需在 R 命令窗口中运行命令 with(test.frame,plot(year,value)) 即可在 y 轴上生成更多值,即 15000、20000、25000 和 30000。但是在 Sweave 生成​​的 PDF 文件中,我的代码在在这篇文章的顶部,我没有得到 y 轴上的所有值(只有 15000 和 25000)。如何在代码中直接控制绘图的大小,让所有必要的y值都出现?


更新:文件apples.d 包含:

#Number of apples I ate
year value
8   12050  #year 2008  
9   15292  #year 2009 
10  23907  #year 2010 
11  33997  #year 2011

【问题讨论】:

  • 您的绘图生成未连接到 Sweave 或 LaTeX。你需要在 R 中解决这个问题(在另一个问题中做一个小的、独立的例子)。关于 Sweave,你见过吗? stat.epfl.ch/webdav/site/stat/shared/Regression/…
  • @Roman 感谢这个有用的链接。
  • @Roman 在我的理解中,情节生成与Sweave有关。我确实用 R 代码(15000、20000、25000 300000)解释了我在 y 轴上得到了什么,而使用 Sweave 我只得到 15000 和 25000。我不明白这里很难理解什么。 1 票赞成
  • 如何在此处包含图片?

标签: r latex sweave eps


【解决方案1】:

您的示例无法重现,因为我们没有文件apples.d,所以我们只能猜测情节出错的原因。请看:

How to make a great R reproducible example?

关于如何制作可重现的示例。

请注意Sweave 不是RstudioTinn-R 的功能,它是一个R 函数(Sweave()),可以从命令行运行或使用R 可执行文件中的参数运行。这可能有助于了解您是否正在搜索信息。

至于你的问题:

  1. 地块的名称总是采用FILENAME-CHUNKLABEL.pdf 或eps 的形式,其中块标签可以设置为Sweave 块的选项(它是第一个参数)。如果您不设置块名称,则将枚举绘图。
  2. 您可以将epseps=true 选项一起使用。我很确定默认情况下会生成 eps 和 pdf 。至于编译,Sweave 不会自己编译,它会创建一个.tex 文件,您可以以任何您想要的方式使用它。在 R 2.14 中有一个选项可以在生成的 .tex 文件上自动运行 pdfLaTeX。 RstudioTinn-R 编译的方式可能是在 Sweave 之后使用 pdfLaTeX 调用。如果您想以不同的方式进行操作,您可以手动操作。
  3. 如果没有可重现的示例,我们只能猜测。出了什么问题?您可以使用 xlimylim 参数设置绘图的限制,但这不应该是这里出了问题。

编辑:

用数据回复已编辑的问题。首先只是一个提示。这种提供数据的方式并不是最有用的方式。我们当然可以重现这一点,但如果您以我们可以立即运行的方式提供数据,则会容易得多。例如:

test.frame<-data.frame(year=8:11, value= c(12050,15292,23907,33991))

至于情节,你的意思是y轴上的标签?这可以通过在 plot 调用中省略轴并使用 axis() 函数手动设置来更改:

with(test.frame,plot(year,value,axes=FALSE))
axis(1)
axis(2,test.frame$value,las=1)

如果刻度不是始终分布在轴上,这看起来确实有点奇怪。更好的是:

with(test.frame,plot(year,value,axes=FALSE))
axis(1)
axis(2,seq(10000,35000,by=5000),las=1)

【讨论】:

  • 需要注意的是eps = true要设置在\SweaveOpts{}中。
  • @Sacha 我现在已经把文件的内容放到了apples.d。现在你应该可以运行代码了。
  • eps = TRUE 是一种更安全的做法(如果你真的想偷懒,可以使用T); true 仅用于历史兼容性
  • 更新了答案。你不能在块选项中设置eps=TRUE 吗?从来没有真正尝试过。
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多