我一直在使用带有R基础图形和tikz输出的knitr一段时间,并且想要试用ggplot2
。但是,这个最小的例子无法使用knitr 1.0.5产生任何输出:
\documentclass{article}
\begin{document}
<<dev = 'tikz'>>=
library(ggplot2)
d = data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9))
ggplot(d, aes(a, b, color = c)) + geom_point()
@
\end{document}
相反,它失败并显示消息Error in UseMethod("depth"): no applicable method for 'depth' applied to an object of class "NULL"
。在R中执行代码或选择png设备将产生预期的图形。省略颜色美学或将c
因子与tikzDevice一起使用,因此连续色标似乎是问题所在。
我做错了什么,或者那是一个错误?
答案 0 :(得分:6)
我可以通过将tikzDevice
添加到代码块的末尾来让dev.off()
使用您的代码。例如:
cat("
\\documentclass{article}
\\begin{document}
<<dev = 'tikz'>>=
library(ggplot2)
d = data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9))
ggplot(d, aes(a, b, color = c)) + geom_point()
dev.off()
@
\\end{document}
", "test_works.Rtex")
knit("test_works.Rtex")
工作正常。
我还注意到如果通过(原始)代码上的活动R会话调用knit()
,我会留下一个活跃的tikz设备......
cat("
\\documentclass{article}
\\begin{document}
<<dev = 'tikz'>>=
library(ggplot2)
d = data.frame(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9))
ggplot(d, aes(a, b, color = c)) + geom_point()
@
\\end{document}
", file = "test_fails.Rtex")
knit("test_fails.Rtex")
dev.list()
答案 1 :(得分:2)
这是一个bug,现在已经在tikzDevice
的开发版本0.10中得到解决,很快就会遇到CRAN。在此之前,请使用
devtools::install_github("yihui/tikzDevice")