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

时间:2013-02-04 14:29:06

标签: r graphics ggplot2 knitr tikz

我一直在使用带有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一起使用,因此连续色标似乎是问题所在。

我做错了什么,或者那是一个错误?

2 个答案:

答案 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")