gnuplot 水平键

vic*_*nik 5 gnuplot

我在 multiplot 环境中使用 gnuplot。我只想有一个钥匙箱(这不是问题),我想在图下放入“水平模式”。

Nice Plot1 | Nice Plot2

Nice Plot3 | Nice Plot4

      the keybox
Run Code Online (Sandbox Code Playgroud)

似乎keybox的总大小不能超过其对应绘图的宽度(所以这里是屏幕大小的一半)。这导致我不想要的密钥箱中的线路返回。

有没有办法绕过它?

谢谢。

编辑:添加了脚本。(密钥箱在 3 行上)

set terminal epslatex color
set output 'Plot.tex'
set multiplot
set xrange [0:0.8]
set key box
set key reverse horizontal maxcols 10 samplen 0.5 spacing 1
#set key font ",9"
set key at screen 0.9,0.15
set size 0.5,0.5
set origin 0,0
set lmargin 4
set bmargin 3
set rmargin 0
set tmargin 0
set xtics nomirror
set ytics nomirror
plot x with lines lt 1 lw 4 lc rgb "red" title 'Median',\
x  with lines lw 4 lc rgb "blue" title '$ F,F^{-1}$',\
x with lines lw 4 lc rgb "magenta" title '$ F,\Gamma^\mathcal{P}$',\
x with lines lw 4 lc rgb "orange" title '$\Lambda_\text{MI}$',\
x with lines lt 1 lw 4 lc rgb "green" title '$k$-NN'


#
# Plot n°2
#
set size 0.5,0.5
set origin 0,0.5
set xrange [0:0.8]
set key off
set title ''
set lmargin 4
set bmargin 3
set rmargin 0
set tmargin 0
set xtics nomirror
set ytics nomirror
plot x  with lines lt 1 lw 4 lc rgb "red" title 'Median',\
x  with lines lw 4 lc rgb "blue" title '$ F,F^{-1}$',\
x  with lines lw 4 lc rgb "magenta" title '$ F,\Gamma^\mathcal{P}$',\
x  with lines lw 4 lc rgb "orange" title '$\Lambda_\text{MI}$',\
x with lines lt 1 lw 4 lc rgb "green" title 'KNN',\
x with lines lt 1 lw 4 lc rgb "black" title 'Ground Truth'

set size 0.5,0.5
set origin 0.5,0
set xrange [0:0.8]
set key off
set title ''
set lmargin 4
set bmargin 3
set rmargin 0
set tmargin 0
set xtics nomirror
set ytics nomirror
plot x with lines lt 1 lw 4 lc rgb "red" title 'Median',\
x with lines lw 4 lc rgb "blue" title '$ F,F^{-1}$',\
x with lines lw 4 lc rgb "magenta" title '$ F,\Gamma^\mathcal{P}$',\
x with lines lw 4 lc rgb "orange" title '$\Lambda_\text{MI}$',\
x with lines lt 1 lw 4 lc rgb "green" title 'KNN',\
x with lines lt 1 lw 4 lc rgb "black" title 'Ground Truth'


set size 0.5,0.5
set origin 0.5,0.5
set xrange [0:0.8]
set key off
set title ''
set lmargin 4
set bmargin 3
set rmargin 0
set tmargin 0
set xtics nomirror
set ytics nomirror
plot x  with lines lt 1 lw 4 lc rgb "red" title 'Median',\
x  with lines lw 4 lc rgb "blue" title '$ F,F^{-1}$',\
x with lines lw 4 lc rgb "magenta" title '$ F,\Gamma^\mathcal{P}$',\
x with lines lw 4 lc rgb "orange" title '$\Lambda_\text{MI}$',\
x with lines lt 1 lw 4 lc rgb "green" title 'KNN',\
x with lines lt 1 lw 4 lc rgb "black" title 'Ground Truth'
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 4

这是一个丑陋的问题。我从来没有真正使用过 epslatex 终端——这可能会导致额外的复杂性,因为文档指出

“当使用 Tex 终端时......其中格式信息嵌入在字符串中,gnuplot 只能估计字符串定位的正确宽度”

您说得对,gnuplot 似乎不想创建一个比绘图更宽的键 - 太糟糕了,您无法像使用 .gnuplot 那样明确指定宽度rectangle。不过,这很容易解决。诀窍是让你的图(没有键)正常,然后制作一个最终的“空”图,它的大小与你需要的一样大以适应标签:

set term ...
set output ...

#Let the magic begin!

set multiplot
unset key

#<plot 1>
#...
#</plot 1>

#<plot 2>
#...
#</plot 2>

#<plot 3>
#...
#</plot 3>

#<plot 4>
#...
#</plot 4>

#<null>
#here we need to unset everything that was set previously
unset origin
unset border
unset tics
unset label
unset arrow
unset title
unset object

#Now set the size of this plot to something BIG
set size 2,2 #however big you need it

#example key settings
set key box 
set key horizontal reverse samplen 1 width -4 maxrows 1 maxcols 12 
set key at screen 0.5,screen 0.15 center top

#We need to set an explicit xrange.  Anything will work really.
set xrange [-1:1]
set yrange [-1:1]

plot NaN w title 'title 1',\
     NaN w title 'title 2',\
     NaN w title 'title 3',\
     NaN w title 'title 4'   #etc.

#</null>
unset multiplot  #<--- Necessary for some terminals, but not postscript I don't think.
Run Code Online (Sandbox Code Playgroud)