labs - ¿La escala de color continua de ggplot2 es incompatible con el dispositivo tikz de knitr?
r ggplot change legend labels (2)
He estado usando knitr con gráficos base R y salida tikz por un tiempo, y quería probar ggplot2
en ggplot2
lugar. Sin embargo, este ejemplo mínimo no produce ningún resultado con 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}
En cambio, falla con el mensaje Error in UseMethod("depth"): no applicable method for ''depth'' applied to an object of class "NULL"
. Ejecutar el código en R o elegir el dispositivo png dará como resultado el gráfico esperado. Omitir la estética del color o factorizar c
funciona con tikzDevice, por lo que la escala de color continua parece ser el problema.
¿Hay algo que estoy haciendo mal, o es un error?
Puedo hacer que tikzDevice
trabaje con tu código agregando dev.off()
al final del bloque de código. Por ejemplo:
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")
funciona bien.
También he notado que si llamo a knit()
través de una sesión R activa en el código (original), me queda un dispositivo tikz activo ...
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()
Esto fue un error , ahora resuelto en la versión de desarrollo 0.10 de tikzDevice
, que llegará pronto a CRAN. Hasta entonces, instale usando
devtools::install_github("yihui/tikzDevice")