2015-06-17 21 views
5

Im vẽ một hình ảnh với 4 biểu đồ khác nhau bằng gnuplot. Nhãn cho trục x và y của chúng có cùng ý nghĩa. Nếu Im âm mưu nó như thế này:Đặt nhãn trên nhóm nhiều người trong 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 

tôi có tất cả bốn đồ thị và nhãn của họ, nhưng tôi muốn đạt được để có một nhãn cho tất cả bốn người trong số họ, như trong example này.

Tôi đã thử với nhãn chưa được đặt cho 3 ô khác, nhưng tôi chỉ nhận được nhãn trên đầu tiên trong khi ô còn lại không có nhãn.

Trả lời

7

Thay vì sử dụng xlabelylabel, bạn có thể muốn đi với set label. Ví dụ,

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

Nếu tất cả các lô có thể được thực hiện bởi các dòng cú pháp tương tự, sau đó tôi khuyên bạn nên sử dụng một do-loop (như trong ví dụ trên) thay vì sao chép nó mỗi lần.

Lưu ý rằng gnuplot sẽ đặt các nhãn 1 và 2 mỗi khi biểu đồ được vẽ. Đó là lý do tại sao tôi đặt unset label 1unset label 2 bên trong vòng lặp do đó, vì vậy các nhãn được đặt ngay trong lần lặp đầu tiên.


Nếu bạn muốn có một cái gì đó giống như ví dụ mà bạn cung cấp, sau đó tôi khuyên bạn nên sử dụng kịch bản này (giải thích thông qua các ý kiến):

#!/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 
hơn

thông tin: gnuplotting

Các vấn đề liên quan