[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