[R] change default output size when using Sweave

baptiste auguie ba208 at exeter.ac.uk
Wed Apr 8 12:56:17 CEST 2009


On 8 Apr 2009, at 11:44, Duncan Murdoch wrote:

> Mark Heckmann wrote:
>> 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.
>>
>
> If your documents are more or less fixed, you could add an extra
> preprocessor step before running Sweave.  For example, create mydoc.in
> containing
>
> <<fig=TRUE, height=@SIZE@>>=
> ...
> @
>
> and then use sed or some other text substitution utility (even R, by
> reading your whole document into an R variable) to substitute the
> desired size for
> the string @SIZE at .  It's clunky, but it sounds as though you're
> interested in producing standardized documents regularly, so it may be
> acceptable.

For that task you might find interest in the brew package by Jeffrey  
Horner.

baptiste


>
> Duncan Murdoch
>> 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
>>
>> ______________________________________________
>> R-help at r-project.org 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.
>>
>
> ______________________________________________
> R-help at r-project.org 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.

_____________________________

Baptiste Auguié

School of Physics
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK

Phone: +44 1392 264187

http://newton.ex.ac.uk/research/emag




More information about the R-help mailing list