[R] change default output size when using Sweave

Mark Heckmann mark.heckmann at gmx.de
Wed Apr 8 10:30:41 CEST 2009


Dear Duncan,

Thanks for the reply. This works, but unfortunately I need a different
solution.
My script is supposed to run completely automated and the graphics I produce
vary in size each time I run the script. But I want the graphics to be
fitted to my .pdf output without specifying the height argument manually
each time.
That is why I do not want a fixed height as a code chunk argument. Actually
I do not know if it is possible to have a variable placed in a code chunk
header. I tried the following which does not work:

<<>>=
size <- 3
@

<<fig=TRUE, echo=TRUE, height=size>>=
   pushViewport(viewport(height = unit(80, "mm")))    
   grid.rect()
   grid.text("I want this viewport to be the whole output size")
   popViewport()
@

So still I face the problem to have Sweave generate a .pdf graphic that is
just as big I want it to be.
 
In the Sweave Docu paragraph A.9 I discovered something I use as a
workaround. I produce the .pdf output manually (where I can control the
size) and add each graphic to LaTex manually as well.
 
<<results=tex, echo=FALSE>>=
for (i in 1){
file=paste("myfile", i, ".pdf", sep="")
pdf(file=file, paper="special", width=6, height=3)
   pushViewport(viewport(height = unit(5, "inches")))     
   grid.rect()
   grid.text("I want this viewport to be the whole output size")
   popViewport()dev.off()
cat("\\includegraphics{", file, "}\n\n", sep="")
}
@

I use parenthesis around the code as it prints out something I do not want
if no parenthesis are used (I use Windows). 

I am not too happy with the solution. I would prefer a more straightforward
approach to define the size of the output graphic. I wonder if there are
some Sweave settings that can be modified. 

In the Sweave manual (A.11) I found the following to customize the par
settings for each figure:

options(SweaveHooks=list(fig=function() par(bg="red", fg="blue")))

I wonder if something similar could be done changing the size of the default
output device (pdf or eps) for each figure like >pdf.options(height=2) or
similar (it seems that this does not work)? 

I suppose this type of graphic customization is quite a common issue when
producing automated customized output/reports using R and Sweave but I
haven't found anything concerning this topic yet.

So I would be really glad if someone knows a solution.

TIA, Mark




-----Ursprüngliche Nachricht-----
Von: Duncan Murdoch [mailto:murdoch at stats.uwo.ca] 
Gesendet: Dienstag, 7. April 2009 19:08
An: Mark Heckmann
Cc: r-help at r-project.org
Betreff: Re: [R] change default output size when using Sweave

On 4/7/2009 10:39 AM, Mark Heckmann wrote:
> I am trying to create a graphic output in Sweave but I do not want it to
be
> standard size. I want the whole graphic to be 80mm of height only, just
like
> the viewport below.
> 
> <<fig=TRUE, echo=TRUE>>=
>    pushViewport(viewport(height = unit(80, "mm")))    
>    grid.rect()
>    grid.text("I want this viewport to be the whole output size")
>    popViewport()
> @
> 
> How can I make the graphic smaller (80mm of height) without having the
white
> margins at the top and bottom?

You can specify height and width as arguments to the code chunk or set 
new defaults with something like

\SweaveOpts{width=5,height=3}

(I think those measurements need to be given in inches; I don't think 
there's a way to use an expression like unit(80,"mm").)

You can also control the size of the plot in the final document with 
LaTeX code like

\usepackage{graphicx}
\setkeys{Gin}{width=3in}

and then the LaTeX rules for handling units would apply, so 80mm is fine 
instead of 3in.

Duncan Murdoch




More information about the R-help mailing list