12

私はしばらくの間、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 デバイスを選択すると、予想されるグラフが得られます。tikzDeviceでも色の美学やファクタリングc作業を省略しているため、連続したカラースケールが問題のようです。

私が間違っていることはありますか、それともバグですか?

4

2 に答える 2

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()
于 2013-08-26T00:03:30.507 に答える