2015-06-17 17 views
5

Impling ein Bild mit 4 verschiedenen Grafiken mit gnuplot. Beschriftungen für ihre x- und y-Achsen haben die gleiche Bedeutung. Wenn Im es so Plotten:Label auf Gruppen-Multiplot in gnuplot setzen

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 

Ich habe alle vier Diagramme und ihre Etiketten, aber ich möchte zu erreichen, für alle vier von ihnen ein Etikett zu haben, wie in diesem example.

Ich versuchte mit nicht gesetztem Etikett für andere 3 Plots, aber ich bekomme Etiketten nur auf der ersten von ihnen, während die anderen überhaupt keine Etiketten haben.

Antwort

7

Anstatt xlabel und ylabel zu verwenden, möchten Sie vielleicht mit set label gehen. Zum Beispiel

#!/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 

Wenn alle Grundstücke durch die gleiche Line-Syntax durchgeführt werden können, dann empfehle ich eine do-Schleife zu verwenden (wie im Beispiel oben), anstatt sie jedes Mal zu kopieren.

Beachten Sie, dass gnuplot jedes Mal, wenn ein Diagramm gezeichnet wird, die Beschriftungen 1 und 2 einfügen. Deshalb setze ich unset label 1 und unset label 2 in die Do-Schleife, so dass die Beschriftungen nur in der ersten Iteration platziert werden.


Wenn Sie etwas ähnlich dem Beispiel haben möchten Sie zur Verfügung gestellt, dann empfehle ich dieses Skript zu verwenden (durch die Kommentare erklärt):

#!/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 

weitere Informationen: gnuplotting