Kalendar

November 2024
M T W T F S S
 123
45678910
11121314151617
18192021222324
252627282930  

Kategorier

Active supporter of WikiPedia
Support Wikipedia

Geocaching

Profile for uwezi

Snygga multiplots med Gnuplot

Tyvärr är denna artikel enbart tillgänglig på English.

18 comments to Snygga multiplots med Gnuplot

  • Brian Koccoloski

    This is __incredibly__ helpful.

  • Man, this settings are awesome! I wrote something similar but without generalizing for the number of columns and rows. Simply stunning, thank you very much for sharing!!!!

  • krv

    Thanks, this is really helpful!

  • Elias

    Thank you very much for this clean and easy to use solution! You’ve spared me a lot of tedious fiddling around.

  • Vijay

    Hi sir, your code is awesome ! This really plot very nice plot. Thank you so much for your effort to produce this script. Hope soon gnuplot come with GUI type of application.

    Best regards
    Vijay

  • Claire M

    You are a life saver! This code is excellent! Thanks so much!

    • uwezi

      Thanks for your feedback!

      I now actually use it always and for every single plot myself! Whether multi- or single…

  • H

    Thank you! It is really useful.

  • Anna

    Thanks so much for this – my plots have turned out great 🙂 +1 gnuplot karma to you my good man.

  • Hosein

    Thanks! very useful template. I modified it to make a 4*4 plot.

  • poruri sai rahul

    brilliant post man. I’m going through your code to modify it for my needs – an animated gif containing disproportionate but aligned subplots.
    just wanted to say thanks, keep up the awesome work 🙂

  • Rayd

    Finally, I managed to successfully adapt the script to my situation. Many thanks!

    • uwezi

      …and I just made an example to accomodate for 3×4 plots…

      Uwe.

      mpl_top    = 0.4 #inch  outer top margin, title goes here
      mpl_bot    = 0.7 #inch  outer bottom margin, x label goes here
      mpl_left   = 0.9 #inch  outer left margin, y label goes here
      mpl_right  = 0.1 #inch  outer right margin, y2 label goes here
      mpl_height = 1.5 #inch  height of individual plots
      mpl_width  = 2.0 #inch  width of individual plots
      mpl_dx     = 0.1 #inch  inter-plot horizontal spacing
      mpl_dy     = 0.1 #inch  inter-plot vertical spacing
      mpl_ny     = 4   #number of rows
      mpl_nx     = 3   #number of columns

      # calculate full dimensions
      xsize = mpl_left+mpl_right+(mpl_width*mpl_nx)+(mpl_nx-1)*mpl_dx
      ysize = mpl_top+mpl_bot+(mpl_ny*mpl_height)+(mpl_ny-1)*mpl_dy

      # placement functions
      #   rows are numbered from bottom to top
      bot(n) = (mpl_bot+(n-1)*mpl_height+(n-1)*mpl_dy)/ysize
      top(n)  = 1-((mpl_top+(mpl_ny-n)*(mpl_height+mpl_dy))/ysize)
      #   columns are numbered from left to right
      left(n) = (mpl_left+(n-1)*mpl_width+(n-1)*mpl_dx)/xsize
      right(n)  = 1-((mpl_right+(mpl_nx-n)*(mpl_width+mpl_dx))/xsize)

      set terminal postscript eps enhanced color dl 2.0 size xsize,ysize "Helvetica" 28
      set encoding iso_8859_1
      set tics scale 1.5

      set output 'mptest.eps'

      set offsets
      set autoscale fix
      set size 1,1
      set nokey

      # define x-axis settings for all subplots
      set xrange [-4:4]
      set xlabel ''
      set format x ''
      set xtics pi
      set mxtics 4

      # start plotting
      set multiplot

      #========================================================
      #
      #-----------------------------------------------
      # subplot  1-4

      #  set horizontal margins for first column (left)
      set lmargin at screen left(1)
      set rmargin at screen right(1)

      #  set horizontal margins for fourth row (top)
      set tmargin at screen top(4)
      set bmargin at screen bot(4)

      set title 'left'
      set label 1 at graph 0.5, graph 0.5 "x1 - y4"

      #.....................................................
        set ylabel "amplitude"
        set yrange [-1.5:1.5]
        set format y "%-2.1f"
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          sin(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 1 lw 2\
        ;

      #-----------------------------------------------
      # subplot  2-4

      #  set horizontal margins for second column (middle)
      set lmargin at screen left(2)
      set rmargin at screen right(2)

      #  set horizontal margins for fourth row (top)
      set tmargin at screen top(4)
      set bmargin at screen bot(4)

      set title 'middle'
      set label 1 at graph 0.5, graph 0.5 "x2 - y4"

      #.....................................................
        set ylabel ""             # no label here
        set yrange [-1.5:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          cos(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 2 lw 2\
        ;

      #-----------------------------------------------
      # subplot  3-4

      #  set horizontal margins for third column (right)
      set lmargin at screen left(3)
      set rmargin at screen right(3)

      #  set horizontal margins for fourth row (top)
      set tmargin at screen top(4)
      set bmargin at screen bot(4)

      set title 'right'
      set label 1 at graph 0.5, graph 0.5 "x3 - y4"

      #.....................................................
        set ylabel ""             # no label here
        set yrange [-1.5:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          cos(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 2 lw 2\
        ;

      #========================================================
      #
      #-----------------------------------------------
      # subplot  1-3

      #  set horizontal margins for first column (left)
      set lmargin at screen left(1)
      set rmargin at screen right(1)

      #  set horizontal margins for third row (second from top)
      set tmargin at screen top(3)
      set bmargin at screen bot(3)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x1 - y3"

      #.....................................................
        set ylabel "amplitude"
        set yrange [-1.5:1.5]
        set format y "%-2.1f"
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          sin(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 1 lw 2\
        ;

      #-----------------------------------------------
      # subplot  2-3

      #  set horizontal margins for second column (middle)
      set lmargin at screen left(2)
      set rmargin at screen right(2)

      #  set horizontal margins for third row (second from top)
      set tmargin at screen top(3)
      set bmargin at screen bot(3)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x2 - y3"

      #.....................................................
        set ylabel ""             # no label here
        set yrange [-1.5:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          cos(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 2 lw 2\
        ;

      #-----------------------------------------------
      # subplot  3-3
      #  set horizontal margins for third column (right)
      set lmargin at screen left(3)
      set rmargin at screen right(3)

      #  set horizontal margins for third row (second from top)
      set tmargin at screen top(3)
      set bmargin at screen bot(3)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x3 - y3"

      #.....................................................
        set ylabel ""             # no label here
        set yrange [-1.5:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          cos(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 2 lw 2\
        ;

      #========================================================
      #
      #-----------------------------------------------
      # subplot  1-2

      #  set horizontal margins for first column (left)
      set lmargin at screen left(1)
      set rmargin at screen right(1)

      #  set horizontal margins for second row (third from top)
      set tmargin at screen top(2)
      set bmargin at screen bot(2)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x1 - y2"

      #.....................................................
        set ylabel "amplitude"
        set yrange [-1.5:1.5]
        set format y "%-1.1f"
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          -sin(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 3 lw 2\
        ;

      #-----------------------------------------------
      # subplot  2-2

      #  set horizontal margins for second column (middle)
      set lmargin at screen left(2)
      set rmargin at screen right(2)

      #  set horizontal margins for second row (third from top)
      set tmargin at screen top(2)
      set bmargin at screen bot(2)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x2 - y2"

      #.....................................................
        set ylabel ""             # no label here
        set yrange [-1.5:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          -cos(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 4 lw 2\
        ;

      #-----------------------------------------------
      # subplot  3-2

      #  set horizontal margins for third column (right)
      set lmargin at screen left(3)
      set rmargin at screen right(3)

      #  set horizontal margins for second row (third from top)
      set tmargin at screen top(2)
      set bmargin at screen bot(2)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x3 - y2"

      #.....................................................
        set ylabel ""             # no label here
        set yrange [-1.5:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          -cos(x) \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 4 lw 2\
        ;

      #========================================================
      #
      #-----------------------------------------------
      # subplot  1-1

      #  set horizontal margins for first column (left)
      set lmargin at screen left(1)
      set rmargin at screen right(1)

      #  set horizontal margins for second row (third from top)
      set tmargin at screen top(1)
      set bmargin at screen bot(1)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x1 - y1"

      #.....................................................
      # now set a label and tic marks for the x-axis

        set xlabel "phase angle"
        set xtics add ("-{/Symbol p}" -pi, "0" 0, "{/Symbol p}" pi)

        set ylabel "amplitude"
        set yrange [0:1.5]
        set format y "%-1.1f"
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          (sin(x))**2 \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 5 lw 2\
        ;

      #-----------------------------------------------
      # subplot  2-1

      #  set horizontal margins for second column (middle)
      set lmargin at screen left(2)
      set rmargin at screen right(2)

      #  set horizontal margins for first row (bottom)
      set tmargin at screen top(1)
      set bmargin at screen bot(1)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x2 - y1"

      #.....................................................
      # now set a label and tic marks for the x-axis

        set xlabel "phase angle"
        set xtics add ("-{/Symbol p}" -pi, "0" 0, "{/Symbol p}" pi)

        set ylabel ""             # no label here
        set yrange [0:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          (cos(x))**2 \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 6 lw 2\
        ;
      #-----------------------------------------------
      # subplot  3-1

      #  set horizontal margins for third column (right)
      set lmargin at screen left(3)
      set rmargin at screen right(3)

      #  set horizontal margins for first row (bottom)
      set tmargin at screen top(1)
      set bmargin at screen bot(1)

      set title ''
      set label 1 at graph 0.5, graph 0.5 "x3 - y1"

      #.....................................................
      # now set a label and tic marks for the x-axis

        set xlabel "phase angle"
        set xtics add ("-{/Symbol p}" -pi, "0" 0, "{/Symbol p}" pi)

        set ylabel ""             # no label here
        set yrange [0:1.5]
        set format y ""           # no tic labels
        set ytics mirror 1
        set mytics 2

        set arrow 1 from graph 0, first 0 rto graph 1,0 nohead lt 1 lw 1 lc 0
        set arrow 2 from first 0, graph 0 rto 0, graph 1 nohead lt 1 lw 1 lc 0

        plot          \
          (cos(x))**2 \
          axes x1y1 \
          title '' \
          with lines lt 1 lc 6 lw 2\
        ;
       
      #========================================================
      # The End
      #-----------------------------------------------
       
      unset multiplot
  • Rayd

    It’s an extremely useful post. I helped me. I’m also trying to extend and adapt it to my case of 12 plots in a 4-rows by 3-columns layout. But still I’m not getting things right. I don’t know if you could help.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>