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?
A lot of thanks in advance,
Mark
change default output size when using Sweave
7 messages · Mark Heckmann, Dieter Menne, Duncan Murdoch +2 more
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
Mark Heckmann <mark.heckmann <at> gmx.de> writes:
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?
<<fig=TRUE, height=3.1>>= I would avoid echo=TRUE with figures, this could lead to confusing results. Note that height is in inches, hope I guess this right. I also suggest not to set heights explicitly afterwards, and avoid aspect (in lattice) for the first try. Nevertheless, getting small borders in Sweave has driven me crazy more than once. Dieter
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
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. 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.
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
1 day later
Hi,
I had a similar problem, and I took the direction of squeezing the
output into a minipage, e.g.:
...
@
\begin{minipage}[c]{0.6\textwidth}
<<fig=TRUE, echo=FALSE>>=
plot(...)
abline(...)
@
\end{minipage}
...
HTH,
Gabriele Franzini
ICT Applications Manager
Nerviano Medical Sciences SRL
Nerviano Italy
-----Original Message-----
From: Mark Heckmann [mailto:mark.heckmann at gmx.de]
Sent: 08 April 2009 10:31
To: 'Duncan Murdoch'
Cc: r-help at r-project.org
Subject: Re: [R] change default output size when using Sweave
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