Проблемы с ggplot и pgfSweave

Я начал использовать Sweave некоторое время назад. Однако, как и большинство людей, я довольно скоро столкнулся с серьезной проблемой: скоростью. На создание большого документа уходит много времени, что затрудняет эффективную работу. Обработку данных можно значительно ускорить с помощью cacheSweave. Однако графики - особенно ggplot;) - по-прежнему занимают слишком много времени для рендеринга. Вот так я хочу использовать pgfSweave.

Спустя много-много часов мне, наконец, удалось создать рабочую систему с Eclipse / StatET / Texlipse. Затем я захотел преобразовать существующий отчет для использования с pgfSweave и получил неприятный сюрприз: большинство моих ggplots, похоже, больше не работают. Следующий график, например, отлично работает в консоли и Sweave:

pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)

Однако при запуске с pgfSweave я получаю следующую ошибку:

Error in if (width > 0) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (width > 0) { :
  the condition has length > 1 and only the first element will be used
Error in driver$runcode(drobj, chunk, chunkopts) : 
  Error in if (width > 0) { : missing value where TRUE/FALSE needed

Когда я удаляю aes (...) из geom_point, график отлично работает с pgfSweave.

pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)

Изменить: Я более подробно изучил проблему и мог бы решить проблему с помощью устройства tikz.

Это работает отлично:

quartz()
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)

Это дает указанную выше ошибку:

tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point(aes(colour=que_id))
print(pl)
dev.off()

Это также отлично работает:

tikz( 'myPlot.tex',standAlone = T )
pl <- ggplot(plot_info,aes(elevation,area))
pl <- pl + geom_point()
print(pl)
dev.off()

Я мог бы повторить это с 5 разными ggplots. Когда в сопоставлении не используется цвет (или размер, альфа, ...), он работает с tikz.

Q1: Есть ли у кого-нибудь какие-нибудь объяснения такого поведения?

Кроме того, кеширование фрагментов кода, не связанных с графиком, работает не очень хорошо. Следующий фрагмент кода с Sweave не требует времени. С pgfSweave это занимает примерно 10 секунд.

<<plot.opts,echo=FALSE,results=hide,cache=TRUE>>=
#colour and plot options are globally set
pal1 <- brewer.pal(8,"Set1")
pal_seq <- brewer.pal(8,"YlOrRd")
pal_seq <- c("steelblue1","tomato2")
opt1 <- opts(panel.grid.major = theme_line(colour = "white"),panel.grid.minor = theme_line(colour = "white"))
sca_fill_cont_opt <- scale_fill_continuous(low="steelblue1", high="tomato2")
ory <- geom_hline(yintercept=0,alpha=0.4,linetype=2) 
orx <- geom_vline(xintercept=0,alpha=0.4,linetype=2)
ts1 <- 2.3
ts2 <- 2.5
ts3 <- 2.8
ps1 <- 6
offset_x <- function(x,y) 0.15*x/pmax(abs(x),abs(y))
offset_y <- function(x,y) 0.05*y/pmax(abs(x),abs(y))
plot_size <- 50*50

Это тоже кажется довольно странным поведением, так как только некоторые переменные настроены для дальнейшего использования.

Q2: У кого-нибудь есть объяснения по этому поводу?

Q3: В более общем плане , Я хотел бы спросить, успешно ли кто-нибудь использует pgfSweave? Я имею в виду, что все вещи, которые работают в Sweave, также работают в pgfSweave, с дополнительным преимуществом в виде красивых шрифтов и повышенной скорости. ;)

Большое спасибо за ответы!

6
задан donodarazao 18 November 2010 в 18:45
поделиться