ggplot2的连续色标是否与knitr的tikzDevice不兼容?

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进行因子分解工作,因此连续色标似乎是个问题.

有什么我做错了,还是那个错误?

Nat*_*ope 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")
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)