2013-02-04 43 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'的bug;鑑於現在沒有積極維護,我建議你使用其他設備來處理這個特定情況。 –

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

工作正常。

我也注意到,如果通過在(原)碼的活性的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() 
+0

謝謝,你剛剛救了我!你怎麼知道這個呢?任何想法爲什麼/會發生什麼? – fabians

2

這是一個bug,現在解決了開發版本0.10的tikzDevice,這將很快擊中CRAN。在此之前,安裝使用

devtools::install_github("yihui/tikzDevice")