Set label in group multiplication in gnuplot

Im draws one image with 4 different graphs using gnuplot. Labels for the x and y axes have the same meaning. If Im builds it like this:

set multiplot layout 2,2 rowsfirst set xlabel "x" set ylabel "y" set title offset -3,-3 set xrange [20:70] set yrange [0:15000] set title "Plot 1" plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle set xrange [20:70] set yrange [0:15000] set title "Plot 2" plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle set xrange [20:70] set yrange [0:15000] set title "Plot 3" plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle set xrange [20:70] set yrange [0:15000] set title "Plot 4" plot 'data5.list' u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle unset multiplot 

I have all four graphs and their labels, but I want to reach one label for all four of them, as in the example.

I tried undoing the shortcut for the other 3 charts, but I only get tags on the first one, while others have no shortcuts at all.

+5
source share
1 answer

Instead of using xlabel and ylabel you can go with set label . For instance,

 #!/usr/local/bin/gnuplot datafile='tmp.dat' # file to plot set xlabel " " # no x-label set ylabel " " # no y-label # assuming all plots have same x and y range set xrange [-2:2] set yrange [-4:4] # same setting for all graph titles set title offset -3,-3 # puts x-label and y-label manually set label 1 'x axis' at screen 0.49,0.02 set label 2 'y axis' at screen 0.01,0.5 rotate by 90 # now the graphs: notice that rowsfirst is given by default set multiplot layout 2,2 do for [i=1:4]{ set title 'plot '.i plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle unset label 1 unset label 2 } unset multiplot reset 

If all graphs can be executed using one line syntax, I recommend using a do-loop (as in the example above), rather than copying it every time.

Note that gnuplot will place labels 1 and 2 each time when plotting. This is why I put unset label 1 and unset label 2 inside the do-loop, so labels only fit in the first iteration.


If you want to have something similar to the example you provided, I recommend using this script (explained in the comments):

 #!/usr/local/bin/gnuplot datafile='tmp.dat' # file to plot # parameters to configure margins of each graph x0=0.1 # left margin all graphs y0=0.99 # top margin all graphs lengthx=0.4 # horizonal length of each graph lengthy=0.4 # vertical length of each graph spacex=0.04 # horizontal space between each graph spacey=0.04 # vertical space between each graph # This is a macro: configure the top, right, left, and bottom margins of each graph. # It will depend on the value of i and j. set macro i=0; j=0; SETMARGINS = "set tmargin at screen (y0-i*(lengthy+spacey));\ set bmargin at screen (y0-i*(lengthy+spacey)-lengthy);\ set lmargin at screen (x0+j*(lengthx+spacex));\ set rmargin at screen (x0+j*(lengthx+spacex)+lengthx)" # Assuming all plots have the same x and y range. If not, set it in each plot below set xrange [-1.5:1.5] set yrange [-4:4] # general setting for plot titles set title offset -3,-3 # don't worry about the axis labels for now unset xlabel unset ylabel ############################################################# set multiplot ##### top-left i=0; j=0; @SETMARGINS # calling the macro for (i,j)=(0,0) set format x '' # no numbers in x-axis set format y '%.1f' # but with numbers in y-axis set title 'plot 1' plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle ##### top-right i=0; j=1; @SETMARGINS # calling the macro for (i,j)=(0,1) set format y '' # no numbers in x nor y-axis set title 'plot 2' plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle ##### bottom-left i=1; j=0; @SETMARGINS # calling the macro for (i,j)=(1,0) set format xy '%.1f' # numbers in both axes set title 'plot 3' plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle ##### bottom-left i=1; j=1; @SETMARGINS # calling the macro for (i,j)=(1,1) set format y '' # no numbers in y-axis # now we set the x and y labels for the 4th plot, and move them to the desired position set xlabel 'xlabel' offset screen -0.5*(spacex+lengthx),0.0 set ylabel 'ylabel' offset screen -lengthx-1.5*spacex,0.5*(spacey+lengthy) set title 'plot 4' plot datafile u 2:1 w lp pt 7 lt 7 lc rgb 'red' notitle unset multiplot reset 

Additional Information: gnuplotting

+7
source

All Articles