2015-06-17 26 views
5

Wykreślam jedno zdjęcie z 4 różnymi wykresami za pomocą gnuplot. Etykiety dla ich osi X i Y mają to samo znaczenie. Jeśli Im wykreślenie go tak:Ustaw etykietę multiplot grupy w gnuplot

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 

mam wszystkie cztery wykresy i ich etykiety, ale chcę osiągnąć mieć jedną etykietę dla wszystkich czterech z nich, jak w tym example.

Próbowałem z niezablokowaną etykietą dla innych 3 działek, ale otrzymuję etykiety tylko na pierwszym z nich, podczas gdy inne nie mają w ogóle etykiet.

Odpowiedz

7

Zamiast używać xlabel i ylabel, możesz chcieć wybrać z set label. Na przykład,

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

Jeśli wszystkie działki mogą być wykonywane przez tę samą linię składni, to polecam użyć do-loop (jak w powyższym przykładzie) zamiast kopiowania go za każdym razem.

Należy zauważyć, że gnuplot umieści etykiety 1 i 2 przy każdym wykreślaniu wykresu. Dlatego wstawiam unset label 1 i unset label 2 do pętli do-do, więc etykiety są umieszczane tylko w pierwszej iteracji.


Jeśli chcesz mieć coś podobnego do przykładu, który podałeś, to polecam użyć tego skryptu (wyjaśnione przez komentarzach):

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

więcej info: gnuplotting