Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gnuplot horizontal key

Tags:

gnuplot

I'm using gnuplot in the multiplot environment. I want to have only one key box (which is not a problem) that i want to put in "horizontal mode" under the plots.

Nice Plot1 | Nice Plot2

Nice Plot3 | Nice Plot4

      the keybox

It seems that the total size of the keybox can't exceed the width of its corresponding plot (so here it's half the screen size). This is causing line returns in the keybox which i don't want.

Is there anyway to get around it?

Thanks.

Edit: Script added. (the keybox is on 3 lines)

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'
like image 470
victolunik Avatar asked Oct 07 '22 03:10

victolunik


1 Answers

This is an ugly problem. I've never really used the epslatex terminal much -- That may cause additional complications as the documentation states that

"When using the Tex terminal ... where formatting information is embedded in the string, gnuplot can only estimate the correct width for string positioning"

You're right on with the fact that gnuplot doesn't seem to want to make a key that is wider than the plot -- too bad you can't specify the width explicitly like you would be able to do with a rectangle. That's easy enough to work around though. The trick is to make your plots (without keys) as normal and then make a final "null" plot that is as big as you need it to be to fit the labels:

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.
like image 56
mgilson Avatar answered Oct 10 '22 02:10

mgilson