首页 文章

由Sweave / R生成的图号和仅为什么(PDF)LaTeX

提问于
浏览
2

我在这里继续我的帖子:

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文档 .

问题:

  • 如果我将上述文件命名为 goodex.snw 并运行Sweave,我会将文件 goodex-004.pdfTinn-RRStudio 作为图表的PDF图像 . 为什么尾随 004 ?这可以改变吗?

  • 可以生成 EPS 文件吗? Sweave编译为PDF的工具是通过(PDF)LaTeX而不是通过传统的DVI> PS> PDF路由吗?

  • 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

1 回答

  • 3

    你的例子是不可重复的,因为我们没有文件 apples.d ,所以我们只能猜出为什么情节出错了 . 请参阅:

    How to make a great R reproducible example?

    关于如何制作可重复的例子 .

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

    至于你的问题:

    • 图的名称始终具有 FILENAME-CHUNKLABEL.pdf 或eps的形式,其中块标签可以设置为Sweave块的选项(它设置一个块名称,将枚举图表 . )

    • 您可以将 eps 与选项 eps=true 一起使用 . 我很确定默认情况下会生成eps和pdf . 至于编译,Sweave本身不编译,它会创建一个 .tex 文件,您可以以任何方式使用它 . 在R 2.14中,有一个选项可以自动在生成的.tex文件上运行pdfLaTeX . RstudioTinn-R 编译的方式可能是在Sweave之后使用pdfLaTeX调用 . 如果您想以不同方式执行此操作,则可以手动执行此操作 .

    • 如果没有可重复的例子,我们只能猜测 . 出了什么问题?您可以使用 xlimylim 参数设置绘图的限制,但这不应该是这里出错的地方 .


    编辑:

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

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

    至于图,你的意思是y轴上的标签?这可以通过省略绘图调用中的轴并使用 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)
    

相关问题