2012-02-24 4 views
4

Я следующий код, который работает, как есть, но не работает, когда кэш = T Изменение устройства не делает разницы (по умолчанию, tikz, каир)ggplot2 с knitr

% \SweaveOpts{fig.path=cache/figure/plot-,cache.path=cache/data/data-,fig.align=center,external=TRUE,fig.show=hold,cache=TRUE,echo=FALSE,pdfcrop=TRUE} 

<<message=F,fig.width=9,fig.height=6,out.width=\textwidth,cache=F>>= 
grid.newpage() 
pushViewport(viewport(layout = grid.layout(2,9))) 

d <- ncol(rTSc) 
p <- ggplot(melt(coveig),aes(1:d,value,group=variable,col=variable)) + 
    geom_line() + labs(x="index",y="eigenvalue") + 
    opts(legend.position = "none") 
print(p, vp=viewport(layout.pos.row=1,layout.pos.col=1:4)) 
p <- ggplot(melt(coreig),aes(1:d,value,group=variable,col=variable)) + 
    geom_line() + labs(x="index",y="eigenvalue") 
print(p, vp=viewport(layout.pos.row=1,layout.pos.col=5:9)) 

p <- ggplot(melt(coveig.cs),aes(1:d,value,group=variable,col=variable)) + 
    geom_line() + labs(x="index",y="cumulative eigenvalue") + 
    opts(legend.position = "none") 
print(p, vp=viewport(layout.pos.row=2,layout.pos.col=1:4)) 
p <- ggplot(melt(coreig.cs),aes(1:d,value,group=variable,col=variable)) + 
    geom_line() + labs(x="index",y="cumulative eigenvalue") 
print(p, vp=viewport(layout.pos.row=2,layout.pos.col=5:9)) 
@ 

Почему бы это это так? Любые идеи?

Спасибо!

+0

Когда я запускаю его по-своему (перепечатка p), он не работает. Когда я запускаю его, где каждый сюжет сохраняется в новой переменной p1, p2, p3 ... он работает без проблем. –

ответ

5

Похоже, что переопределение p - это то, что укусит кеш. Попробуйте сохранить изображения в виде отдельных графиков, а затем поместите их в окно просмотра по одному за раз. (Он также обеспечивает более четкий код).

\documentclass[12pt]{article} 
\title{Example} 

\begin{document} 

<<loading,echo=F>>= 
library(ggplot2) 
library(gridExtra) 
@ 

\section{This is a Section} 

<<message=F,fig.width=9,fig.height=6,out.width=\textwidth,cache=T>>= 
x <- rnorm(100) 
y <- runif(100) 
dat <- data.frame(x,y) 

grid.newpage() 
pushViewport(viewport(layout = grid.layout(2,9))) 

p1 <- ggplot(dat, aes(x,y)) + geom_point() 
p2 <- ggplot(dat, aes(y,x)) + geom_point() 

print(p1, vp=viewport(layout.pos.row=1,layout.pos.col=1:9)) 
print(p2, vp=viewport(layout.pos.row=2,layout.pos.col=1:9)) 
@ 

\end{document} 
+10

интересный ... как автор книги, я даже не знаю, как это сработало; мне это неожиданно (я думал, что «print (p1)» принесет неприятности, но оказалось, что это не так). Я подожду ближе к объектам сетки. Спасибо за отличный пример :) –

+0

Я думаю, что это похоже на попытки кэширования вызовов библиотеки. –

Смежные вопросы