现在我正在学习sweave写一个包装小插图。我正在使用传统的R图形。奇怪的是,我添加到高级绘图中的一个传奇工作正常,否则在我扫描文件时不起作用。这是一个最小的例子:
\documentclass{article}
\begin{document}
<<fig=TRUE>>=
plot(0.5, 0.5, xlim = c(0,1), ylim = c(0,1))
legend("bottomright", c("data", "summary", "curve", "conf. region"),
pch = c(2,1,NA,NA), lwd = c(NA,NA, 2,1))
@
\end{document}
R代码生成(当运行R版本2.15时)单点和由两个点组成的图例,以及两种不同类型的线:
在sweave中,传说无法生成,我只看到一个空盒子:
这是一个sweave bug,还是我忽略了什么?
答案 0 :(得分:6)
这似乎是一个错误,但这是pdf()
而不是Sweave()
本身的问题。
要了解我的意思,请尝试拨打pdf()
。它会产生上面显示的相同缺陷图:
pdf("pdfPlot.pdf")
plot(0.5, 0.5, xlim = c(0,1), ylim = c(0,1))
legend("bottomright", c("data", "summary", "curve", "conf. region"),
pch = c(2,1,NA,NA), lwd = c(NA,NA, 2,1))
dev.off()
相比之下,cairo_pdf()
会产生一个看起来很好的情节:
cairo_pdf("cairo_pdfPlot.pdf")
plot(0.5, 0.5, xlim = c(0,1), ylim = c(0,1))
legend("bottomright", c("data", "summary", "curve", "conf. region"),
pch = c(2,1,NA,NA), lwd = c(NA,NA, 2,1))
dev.off()
如果您愿意切换到knitr
,那么解决这个问题很容易。只需将dev="cairo_pdf"
添加到您的代码块标题中(如果您愿意,可以删除fig=TRUE
),如下所示:
<<dev="cairo_pdf">>=
...
...
@
处理代码就像执行library(knitr); knit("myScript.Rnw")
代替当前对Sweave("myScript.Rnw")
如果你必须坚持使用Sweave()
,做这样的事情可以解决问题:
<<results=tex, term=FALSE, echo=FALSE>>=
cairo_pdf("myPlot.pdf", width=5)
plot(0.5, 0.5, xlim = c(0,1), ylim = c(0,1))
legend("bottomright", c("data", "summary", "curve", "conf. region"),
pch = c(2,1,NA,NA), lwd = c(NA,NA, 2,1))
dev.off()
cat("\\includegraphics{myPlot.pdf}\n\n")
@