Tyvärr är denna artikel enbart tillgänglig på English.
|
||||||
Snygga multiplots med Gnuplot18 comments to Snygga multiplots med Gnuplot |
||||||
Copyright © 2024 GreenPhotons – gröna fotoner - All Rights Reserved |
This is __incredibly__ helpful.
Thanks!
I use this template now for all my Gnuplot plots, whether multi or single…
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!!!!
Thanks, this is really helpful!
Thank you very much for this clean and easy to use solution! You’ve spared me a lot of tedious fiddling around.
Gern geschehen 🙂
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
You can use Gnuplot together with GnuOctave – but for what would you need a GUI?
You are a life saver! This code is excellent! Thanks so much!
Thanks for your feedback!
I now actually use it always and for every single plot myself! Whether multi- or single…
Thank you! It is really useful.
Thanks so much for this – my plots have turned out great 🙂 +1 gnuplot karma to you my good man.
Thank you! And may Gnuplot be with you…
Thanks! very useful template. I modified it to make a 4*4 plot.
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 🙂
Finally, I managed to successfully adapt the script to my situation. Many thanks!
…and I just made an example to accomodate for 3×4 plots…
Uwe.
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
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.