[R] issues with Sweave and inclusion of graphics in a document

Prof Brian Ripley ripley at stats.ox.ac.uk
Sun Aug 20 08:10:52 CEST 2006


savePlot is just an internal version of dev.copy, part of the support for 
the menus on the windows() graphics device.

It is described in `An Introduction to R' (the most basic R manual).


On Sat, 19 Aug 2006, Thomas Harte wrote:

> the problem is a little hard to explain; the .Rnw files (below)
> probably do a better job, but here goes ...
> 
> Sweave doesn't like it when i size a graphical device in a code
> chunk using either, e.g.:
> 
> 	windows(width=20, height=5)
> 
> in Windows, or, e.g.
> 
> 	x11(width=20, height=5)
> 
> under X, when i then plot something in said device and try to 
> include this graphical output in the resulting document.
> 
> Sweave does not object to my writing code chunks in the above
> manner, so long as i do not wish to include the code in a LaTeX 
> figure environment.
> 
> oftentimes i want to do precisely what Sweave doesn't appear
> to allow. for example, with time-series data, i want to see a 
> wide window on the screen as i code, and then i want to include 
> the graphical output in my document the way that i fine tuned 
> it on the screen. i don't want to write two pieces of code:
> the first, to view output on the sceen; the second, to save
> the output to a .pdf file for inclusion in the document.
> 
> some example .Rnw files should illustrate my plight.
> suggestions on a workaround (i.e. how to do what i describe in 
> linux/X) welcome.
> 
> 
> % >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example-windows.Rnw
> \documentclass[a4paper]{article}
> 
> \begin{document}
> 
> \noindent This is an example of what I can do on Windows. Unhappily, I seem to be
> able to squeeze marginally more out of \texttt{Sweave} \emph{chez\/} Bill Gates
> than I can under Linux. Ho, hum.
> 
> <<echo=false,results=hide>>=
> 	# create a simple AR process:
> 	make.ar.1<- function(alpha=1,n=300) {
> 		Z<- rnorm(n); 
> 		Y<- numeric(n); 
> 		Y[1]<- Z[1]; 
> 		for (i in 2:n) Y[i]<- alpha*Y[i-1]+Z[i]; 
> 		return(Y)
> 	}
> @
> 
> <<label=ar.1>>=
> 	# a long AR process is best viewed in a wide window:
> 	windows(width=20, height=5)
> 	sp<- make.ar.1(alpha=.5, n=800)
> 	plot(sp, type="l", col="blue")
> 	# WISIWIS: What I See Is What I Save ;)
> 	savePlot("ar",type="pdf")
> @
> \begin{figure}
> \begin{center}
> % 	imporantly, by saving the plot i have direct control over graphics in LaTeX, 
> % 	and i can fine-tune the the graphics placement as much as i want:
> 	\includegraphics[width=14.5cm]{./ar.pdf}
> \caption{An AR(1) process of length~\protect\Sexpr{length(sp)} 
> is best viewed in a wide window.}
> \end{center}
> \end{figure}
> 
> 
> \noindent Had I tried to do the following, \texttt{Sweave} would have blown up!
> \begin{verbatim}
> 	<<label=ar.1>>=
> 		windows(width=20, height=5) 	# <- this is the offending command:
> 		sp<- make.ar.1(alpha=.5, n=800)
> 		plot(sp, type="l", col="blue")
> 	@
> 	\begin{figure}
> 	\begin{center}
> 	<<fig=true>>=
> 	<<ar.1>>
> 	@
> 	\caption{An AR(1) process of length~\protect\Sexpr{length(sp)} 
> 	is best viewed in a wide window.}
> 	\end{center}
> 	\end{figure}
> \end{verbatim}
> 
> 
> \noindent The take-home message is that \texttt{savePlot} saves the day under Windows.
> As far as I know, there is no equivalent under Linux, or rather, under X.
> 
> In Windows, then,
> \begin{itemize}
> \item I can plot the way I want on the screen;
> \item I can save that plot to a file without writing any other code;
> \item I can include the saved plot in my \LaTeX\ figure, allowing me to 
> 	fine-tune with the \verb@\includegraphics{}@ command.
> \end{itemize}
> Strike one for the Evil Empire.
> 
> \end{document}
> % <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< example-windows.Rnw
> 
> 
> 
> % >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example-linux.Rnw
> \documentclass[a4paper]{article}
> 
> \begin{document}
> 
> \noindent This is an example of the hapless state of my \texttt{Sweave}ing under Linux. 
> 
> <<echo=false,results=hide>>=
> 	# create a simple AR process:
> 	make.ar.1<- function(alpha=1,n=300) {
> 		Z<- rnorm(n); 
> 		Y<- numeric(n); 
> 		Y[1]<- Z[1]; 
> 		for (i in 2:n) Y[i]<- alpha*Y[i-1]+Z[i]; 
> 		return(Y)
> 	}
> @
> 
> \noindent Because of the \verb at x11(width=20, height=5)@ command, 
> I can't embed the graphical output that the following piece of code 
> produces in my document, although I can view the results on screen:
> <<label=first.ar.1>>=
> 	# a long AR process is best viewed in a wide window:
> 	x11(width=20, height=5)
> 	sp<- make.ar.1(alpha=.5, n=800)
> 	plot(sp, type="l", col="blue")
> 	# no savePlot ... can't seem to do anything with this plot
> 	# if i try to include this code in a figure environment then
> 	# Sweave blows up
> 	# so i have to stop here :(
> @
> 
> \noindent Instead, I have to do something like the following, which has the unfortunate 
> side effects of disallowing me from seeing the graphical output on the screen, and,
> probably
> more importantly, of duplicating the above code:
> <<label=ar.1,echo=true>>=
> 	sp<- make.ar.1(alpha=.5, n=800)
> 	pdf("ar.pdf", width=20, height=5)
> 	plot(sp, type="l", col="blue")
> 	dev.off()
> @
> \begin{figure}
> \begin{center}
> % 	at least i still retain direct control over graphics in LaTeX; i can fine-tune the 
> % 	the graphics placement as much as i want:
> 	\includegraphics[width=14.5cm]{./ar.pdf}
> \caption{An AR(1) process of length~\protect\Sexpr{length(sp)} 
> is best viewed in a wide window.}
> \end{center}
> \end{figure}
> 
> Under X, then,
> \begin{itemize}
> \item I have to use a device such as \texttt{pdf} and I lose the ability to first 
> 	see the output on screen;
> \item I can still save that plot to a file without writing any other code;
> \item I can still include the saved plot in my \LaTeX\ figure, allowing me to 
> 	fine-tune with the \verb@\includegraphics{}@ command.
> \end{itemize}
> 
> \end{document}
> % <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< example-linux.Rnw
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-help mailing list