[R] R: layout() affects margin size in subfigures [unexpected behaviour]
Sarah Goslee
sarah.goslee at gmail.com
Thu Jan 14 17:48:39 CET 2016
You're setting margin using mar, which is in terms of lines, which is,
well, difficult to manage properly.
‘mar’ A numerical vector of the form ‘c(bottom, left, top, right)’
which gives the number of lines of margin to be specified on
the four sides of the plot. The default is ‘c(5, 4, 4, 2) +
0.1’.
If you use mai instead, you will get a consistent physical size.
‘mai’ A numerical vector of the form ‘c(bottom, left, top, right)’
which gives the margin size specified in inches.
See also this bit of ?par:
The meaning of ‘character size’ is not well-defined: this is set
up for the device taking ‘pointsize’ into account but often not
the actual font family in use. Internally the corresponding pars
(‘cra’, ‘cin’, ‘cxy’ and ‘csi’) are used only to set the
inter-line spacing used to convert ‘mar’ and ‘oma’ to physical
margins. (The same inter-line spacing multiplied by ‘lheight’ is
used for multi-line strings in ‘text’ and ‘strheight’.)
Sarah
On Thu, Jan 14, 2016 at 8:42 AM, Malcolm Perry <mgperry32 at gmail.com> wrote:
> The absolute margin size of figures in R seems to be affected by the layout
> of the plot, which i think is surprising (not sure if it qualifies as a
> bug). The following plots have different margins sizes, with the 1x3 plot
> margins being smaller (thus giving a larger plot area). This is causing
> havoc with a package I am writing to automatically generate composite
> figures, since labels are positioned differently depending on the number of
> panels.
>
> plot_box <- function() {
> plot(1, 1, type='n', bty='n', xaxt='n', yaxt='n', xlab='', ylab='')
> box(lwd = 6)
> box("figure", lwd=6, col='red')
> }
>
> png("margin_test_1.png", width=1000, height=500)
> par(oma=c(0,0,0,0))
> layout(t(1:2))
> par(mar=c(3, 3, 3, 3))
> plot_box()
> par(mar=c(3, 3, 3, 3))
> plot_box()
> dev.off()
>
> png("margin_test_2.png", width=1500, height=500)
> par(oma=c(0,0,0,0))
> layout(t(1:3))
> par(mar=c(3, 3, 3, 3))
> plot_box()
> par(mar=c(3, 3, 3, 3))
> plot_box()
> par(mar=c(3, 3, 3, 3))
> plot_box()
> dev.off()
>
> I have also posted this question to StackOverflow, and it has images of the
> graphical output which illustrate the problem better:
> http://stackoverflow.com/questions/34790682/r-layout-affects-margin-size-in-plot-regions
>
> Thanks,
>
> Malcolm
>
> PS I was unsure if this question belonged to help or devel - I will repost
> on devel if it is likely to get better answers.
>
--
Sarah Goslee
http://www.numberwright.com
More information about the R-help
mailing list