Tar*_*ral 12 graphics r tikz ggplot2 knitr
我一直在使用带有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}
Run Code Online (Sandbox Code Playgroud)
相反,它失败了Error in UseMethod("depth"): no applicable method for 'depth' applied to an object of class "NULL"
.在R中执行代码或选择png设备将产生预期的图形.省略颜色美学或c
使用tikzDevice进行因子分解工作,因此连续色标似乎是个问题.
有什么我做错了,还是那个错误?
我可以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")
Run Code Online (Sandbox Code Playgroud)
工作良好.
我还注意到,如果knit()
通过(原始)代码上的活动R会话进行调用,我将留下一个活跃的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()
Run Code Online (Sandbox Code Playgroud)