Search code examples
plotscriptinggnuplot

How do gnuplot margins work in multiplot mode?


I am a bit confused about gnuplot margins. First of all I have no idea what units these things are pointing to. Are they pointing to the canvas coordinates OR are they a fraction of the canvas coordinates. Do they behave the same in gnuplot mode and multiplot mode?

My problem arises when plotting some data in multiplot mode. I am plotting to the screen (wtx terminal). Let's just say I am bungling things badly - I get plots off the canvas, or very small unreadable plots.

Without margins the first plot is flush against the top of the canvas, so naturally I want to push it down a bit.

Can someone explain how gnuplot margins work and if they behave the same in multiplot mode.


Solution

  • Yes, the margins behave very similar in "normal" plotting mode and in multiplot mode. Basically, the margins can have three different "modes":

    1. Automatic, which is the default.
    2. Setting each margin to a specific size, like set lmargin 2. The unit is character widths (or character heights for tmargin and bmargin).
    3. Setting a specific position of a border relative to the whole canvas, like set lmargin at screen 0.1, which sets the left plot border at 10% of the total canvas width.

    The only difference of the multiplot mode is, that the reference for the margins in 1. and 2. is given by the sites determined by the layout option:

    set multiplot layout 2,2
    

    This subdivides the whole canvas in four rectangles of equal size. Now, using

    set lmargin 1
    set rmargin 1
    set tmargin 1
    set bmargin 1
    

    leaves a margin of one character width or height on each side of each subplot with respect to the smaller rectangles:

    set multiplot layout 2,2
    set lmargin 0
    set rmargin 0
    set tmargin 0
    set bmargin 0
    set format ''
    plot x
    plot x**2
    plot x**3
    plot x**4
    unset multiplot
    

    enter image description here

    set multiplot layout 2,2
    set lmargin 1
    set rmargin 1
    set tmargin 1
    set bmargin 1
    set format ''
    plot x
    plot x**2
    plot x**3
    plot x**4
    unset multiplot
    

    enter image description here

    If you want to set absolute positions of each border, this becomes more cumbersome, because you have to set four margins for each plot (the layout options doesn't have any effect in this case):

    set multiplot
    set lmargin at screen 0.1
    set rmargin at screen 0.47
    set tmargin at screen 0.97
    set bmargin at screen 0.6
    plot x
    ...
    

    Gnuplot version 5 offers a quite flexible way to produce equal rectangles, see my answer to Removing blank gap in gnuplot multiplot