Eliminar espacio en blanco en el multiplot de gnuplot

Estoy usando multiplot en gnuplot para insertar cuatro gráficos en una sola figura. Mi código se ve así:

set term postscript eps enhanced color set xlabel 'i' set ylabel 'j' set xtics 20 set ytics 20 set xlabel font ",20" set ylabel font ",20" set pm3d map set pm3d corners2color c1 set out "Rulkovpattern.eps" set multiplot layout 2,2 set title "(a)" set size square 0.55,0.55 spl 'patternD0pt02.dat' notitle set title "(b)" set size square 0.55,0.55 spl 'patternD0pt04.dat' notitle set size square 0.55,0.55 set title "(c)" spl 'patternD0pt06.dat' notitle set size square 0.55,0.55 set title "(d)" spl 'patternD0pt08.dat' notitle unset multiplot set out set term wxt 

Esto genera la siguiente imagen: patrones

Pero en esta imagen, hay un montón de espacio en blanco en el medio. Me gustaría hacer desaparecer ese espacio o al menos hacerlo lo más pequeño posible. ¿Cómo puedo hacerlo modificando mi código?

Gracias por adelantado

Obtener los márgenes correctos con multiplot es un poco tedioso, especialmente cuando se usa el set pm3d map , que tiene márgenes bastante grandes.

Dado que el primer candidato de lanzamiento de la versión 5.0 ya está disponible, me gustaría mencionar los nuevos margins y las opciones de spacing de multiplot .

margins requieren cuatro números para set multiplot margins ,,, , que proporcionan los márgenes globales fijos alrededor del diseño del multiplot. spacing requiere dos set multiplot spacing , números set multiplot spacing , que proporciona la distancia entre dos filas ( ) o dos columnas ( ).

 set terminal pngcairo size 800,600 background rgb '#bbbbbb' set output 'foobar.png' set multiplot layout 2,2 \ margins 0.1,0.98,0.1,0.98 \ spacing 0.08,0.08 set ylabel 'ylabel' plot x unset ylabel plot 2*x set ylabel 'ylabel' set xlabel 'xlabel' plot 3*x unset ylabel plot 4*x unset multiplot 

Resultado (con 5.0rc1):

enter image description here

Para lograr lo mismo con gnuplot 4.x, debe hacer los cálculos a mano o definir algunas funciones, como muestra el siguiente ejemplo. Esto debería ser universalmente utilizable.

Puede poner todo el contenido general en un archivo de configuración, como multiplot.gp , que contiene las funciones

 init_margins(left, right, bottom, top, dx, dy, rows, cols) = \ sprintf('left_margin = %f; right_margin = %f; top_margin = %f; bottom_margin = %f; ', left, right, top, bottom) . \ sprintf('col_count = %d; row_count = %d; gap_size_x = %f; gap_size_y = %f', cols, rows, dx, dy) get_lmargin(col) = (left_margin + (col - 1) * (gap_size_x + ((right_margin - left_margin)-(col_count - 1) * gap_size_x)/col_count)) get_rmargin(col) = (left_margin + (col - 1) * gap_size_x + col * ((right_margin - left_margin)-(col_count - 1) * gap_size_x)/col_count) get_tmargin(row) = (top_margin - (row - 1) * gap_size_y - (row-1) * ((top_margin - bottom_margin - gap_size_y * row_count) / row_count)) get_bmargin(row) = (top_margin - (row - 1) * gap_size_y - row * ((top_margin - bottom_margin - gap_size_y * row_count) / row_count)) set_margins(col, row) = \ sprintf('set lmargin at screen %f;', get_lmargin(col)) . \ sprintf('set rmargin at screen %f;', get_rmargin(col)) . \ sprintf('set tmargin at screen %f;', get_tmargin(row)) . \ sprintf('set bmargin at screen %f;', get_bmargin(row)) 

El archivo principal es entonces

 set terminal pngcairo size 800,600 background rgb '#bbbbbb' set output 'foobar2.png' load 'multiplot.gp' eval(init_margins(0.1, 0.98, 0.1, 0.98, 0.08, 0.08, 2, 2)) set multiplot eval(set_margins(1,1)) set ylabel 'ylabel' plot x eval(set_margins(2,1)) unset ylabel plot 2*x eval(set_margins(1,2)) set ylabel 'ylabel' set xlabel 'xlabel' plot 3*x eval(set_margins(2,2)) unset ylabel plot 4*x unset multiplot 

Con el resultado (usando 4.6.4):

enter image description here

En multiplot usando set lmargin , set rmargin , set bmargin y set tmargin , para el margen izquierdo, derecho, inferior, superior alrededor de su gráfico, tendrá el mejor control del posicionamiento de sus gráficos. En mi experiencia, te da un poco más de libertad que la opción de layout que estás usando ahora.

Un buen ejemplo de cómo hacer esto para un solo gráfico se encuentra aquí: http://www.gnuplotting.org/multiplot-placing-graphs-next-to-each-other/

Otro enfoque es definir funciones para establecer el margen, que es más fácil si todos los gráficos son del mismo tamaño, consulte: http://www.sciencetronics.com/greenphotons/?p=570

Si todos tienen la misma xlabel y etiqueta, puede usar esto

 set terminal postscript eps enhanced color set output 'YOUR_GRAPH.eps' L = 0.14 R = 0.95 TOP=0.98 DY = 0.29 set multiplot set offset 0,0,graph 0.05, graph 0.05 set ylabel 'XLABEL' offset 1 set xlabel 'YLABEL' set tmargin at screen TOP-1.65*DY set bmargin at screen TOP-3*DY set lmargin at screen R-6*L set rmargin at screen R-3*L plot "YOUR_DATA.dat" title"TITLE 1" set ytics format '' unset ylabel set lmargin at screen R-3*L set rmargin at screen R plot "YOUR_DATA2.dat" title"TITLE 2" #################################################################### set format y "%.2f" set ylabel 'd' offset 1 set tmargin at screen TOP set bmargin at screen TOP-1.35*DY set lmargin at screen R-6*L set rmargin at screen R-3*L plot "YOUR_DATA3.dat" title"TITLE 3" set ytics format '' unset ylabel set lmargin at screen R-3*L set rmargin at screen R plot "YOUR_DATA4.dat" title"TITLE 4"