2013-02-04 6 views
12

私は今、Rベースのグラフィックスとtikz出力でknitrを使っていますが、代わりにggplot2を試してみたかったのです。ただし、この最小限の例では、knitr 1.0.5で任意の出力を生成するために失敗します。ggplot2の連続カラースケールはknitrのtikzDeviceと互換性がありませんか?

\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と同様に働くので、連続的な色のスケールが問題のようです。

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

+3

のようなものは 'tikzDevice'のバグのようなものです。それが現在積極的に管理されていないことを考えると、この特定のケースでは他のデバイスを使用することをお勧めします。 –

+0

私は軸ラベルをTeXでタイプセットしているのが本当に好きなので、残念です。たぶん私はそれに慣れるとtikzDeviceを見ます。 – Taral

+0

@Yihui私はちょうど同じバグを見つけました。使用するデバイスの推奨事項 – RoyalTS

答えて

6

コードブロックの末尾にdev.off()を追加することで、tikzDeviceにコードを使用させることができます。たとえば、

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

が問題ありません。

私もこれは今で解決bug、だった

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() 
+0

ありがとう、あなたは私を救った!どのようにあなたはそれを理解しましたか?任意のアイデア理由/何が起こるか? – fabians

2

...(オリジナル)コード上でアクティブRセッションを通じてknit()を呼び出した場合、私は、アクティブは、TikZデバイスが残っていますことに気づきました開発版の0.10のtikzDeviceはすぐにCRANに衝突します。それまでは、

devtools::install_github("yihui/tikzDevice") 
関連する問題