gnuplot: making axes numbers smaller in epslatex makes my axes label disappear offscreen

3.2k views Asked by At

I'm writing a script to generate three plots in a column (using multiplot and setting margins). They all share an x-axis, so it's only necessary to label that on the bottom plot, but they have separate y-axes.

I'm using the epslatex terminal in gnuplot to generate the plots with latex labels and axes. Basically, I need the numbers on the axis to use a smaller font size than the actual axis labels. So far, I've been doing this using,

reset

set term epslatex standalone color solid 10
set output 'myplot.tex'

set multiplot;

    #Common width for all three plots is set

    set lmargin at screen 0.15;
    set rmargin at screen 0.90;

    set format x ""; #Removes xlabels from plots without removing tic marks

    #First plot

    set tmargin at screen 0.98;
    set bmargin at screen 0.72;

            set ylabel '$Label Name 1$';
            set format y '\scriptsize{%g}';
            plot "mydata.dat" u 1:3 w l lt 1 lw 3

    #Second plot

    set tmargin at screen 0.70;
    set bmargin at screen 0.44;
            set ylabel '$Label Name 2$';
            set format y '\scriptsize{%g}';
            plot "mydata.dat" u 1:11 w l lt 2 lw 3

    #Third plot

    set tmargin at screen 0.42;
    set bmargin at screen 0.16;
            set xlabel 'Common Label Name'; 
            set format x '\scriptsize{%g}'; # Here I reset the x axis so it shows on 
                                              this plot
            set ylabel 'Label Name 3';
            set format y '\scriptsize{%g}';
            plot "mydata.dat" u 1:5 w l lt 3 lw 3

unset multiplot;

So as you can see I use latex to format the numbers in a different size, specifically \scriptsize. For the xlabel at the end, everything works fine; the numbers are at a smaller font, and the xlabel prints just beneath it at the regular size. For the ylabels, however, the numbers DO appear smaller, but the actual label names don't appear on the plot.

At first I though they weren't being acknowledged somehow, but when I experimented with the margins, I found that if I move lmargin to the middle of the page, the ylabels reappear! It seems, for whatever reason, they're just being drawn some large distance from the axes themselves.

I've tried setting the labels with an offset, but that yields no joy.

1

There are 1 answers

0
Christoph On

The reason for this behaviour is, that gnuplot doesn't know, how the tics with LaTeX syntax will ultimately look like. The program tries to estimate the tic label length and adjusts the label positions accordingly.

If you have a format '\scriptsize %g', the tic labels seem to be very large:

set terminal epslatex standalone 
set output 'label-offset.tex'
set format y '\scriptsize %g'
set ylabel 'ylabel'
plot x

set output
system('latex label-offset.tex && dvips label-offset.dvi && ps2pdf label-offset.ps')

Gnuplot version 4.2.6 doesn't consider the \scriptsize at all and you need a very large offset to compensate it: set ylabel 'ylabel' offset 14.

Since versoin 4.4 the behaviour is better, you need an much lower offset: set ylabel 'ylabel' offset 4.

Some remarks:

  • \scriptsize is a switch and doesn't take an argument. Consider set xlabel '\scriptsize{scriptsize} normal?'. To limit its effect, surround the text with brackets, like {\scriptsize %g}. But that is not necessary for tic labels, since they are in any case put in brackets.

  • To have italic text, use \textit{label name 1}, and not the math mode with $-signs.