问题
这似乎是一个bug,但它是与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()
解决方案1:使用knitr。
如果您愿意切换到knitr
,那么修复这个问题就很容易了。只需将dev="cairo_pdf"
添加到您的代码块头部(如果您愿意,可以去掉fig=TRUE
),像这样:
<<dev="cairo_pdf">>=
...
...
@
处理代码就像现在这样简单:在您当前调用Sweave("myScript.Rnw")
的位置上执行library(knitr); knit("myScript.Rnw")
。
解决方案2:构建自己的\includegraphics{}调用。
如果您必须坚持使用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")
@