在gnuplot中设置组合多图的标签

7

我正在使用gnuplot绘制一张图片,其中包含4个不同的图表。它们的x轴和y轴标签具有相同的含义。如果我按以下方式绘制它:

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

我有四张图表和它们各自的标签,但我想要实现它们所有四个图表只有一个共同的标签,就像这个例子中一样。
我试着去掉其他三个图表的标签,但是我只在第一个图表上得到标签,而其他的没有标签。
1个回答

9

如果你不想使用xlabelylabel,可以考虑使用set label。例如:

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

如果所有的图表都可以使用相同的线语法完成,则建议使用do-loop(如上例中所示),而不是每次复制。请注意,gnuplot会在每次绘制图表时放置标签1和2。这就是为什么我在do-loop内放置了unset label 1和unset label 2的原因,这样标签就只会在第一次迭代时放置。
如果您想要类似于提供的示例的内容,则建议使用以下脚本(通过注释进行解释):
#!/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

more info: gnuplotting


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接