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, heig...@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 @s...@.  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:murd...@stats.uwo.ca]
Gesendet: Dienstag, 7. April 2009 19:08
An: Mark Heckmann
Cc: r-help@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@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@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

______________________________________________
R-help@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.

Reply via email to