Подтвердить что ты не робот

Является ли ggplot2 непрерывной цветовой шкалой несовместимой с knitr tikzDevice?

Я использую knitr с базой R и графикой tikz на некоторое время, и хотел попробовать 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, поэтому проблема с непрерывной цветовой шкалой кажется проблемой.

Есть ли что-то, что я делаю неправильно, или это ошибка?

4b9b3361

Ответ 1

Я могу получить 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")

отлично работает.

Я также заметил, что если вы вызываете 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()