gpt4 book ai didi

r - 在 Sweave : is this a bug? 中使用 legend()

转载 作者:行者123 更新时间:2023-12-01 08:00:49 24 4
gpt4 key购买 nike

现在我正在学习 sweave 来编写一个包 vignette。我正在使用传统的 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 时)一个点和一个由两点组成的图例,以及两种不同类型的线: correct legend

在 sweave 中无法生成图例,我只看到一个空框: no legend

这是 sweave 错误,还是我忽略了什么?

最佳答案

问题

这看起来确实是一个错误,但它是 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。

如果您愿意切换到 knitr,解决这个问题很容易。只需将 dev="cairo_pdf" 添加到您的代码块 header (并且,如果您愿意,删除 fig=TRUE),如下所示:

<<dev="cairo_pdf">>=
...
...
@

然后处理代码就像执行 library(knitr) 一样简单; knit("myScript.Rnw") 代替您当前对 Sweave("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")
@

关于r - 在 Sweave : is this a bug? 中使用 legend(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727445/

24 4 0
文章推荐: jquery - Flexslider 从随机幻灯片开始,然后继续按顺序加载
文章推荐: java - 将 int 值分配给 JCheckBox
文章推荐: jquery - 如何不断检查
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com