Compensaciones de Gnuplot con rango personalizado (v5.4)

CorePress2024-01-24  6

Tengo un problema con el funcionamiento de las compensaciones en gnuplot v5.4 en comparación con v5.2. Intenté hacer el siguiente gráfico (v5.2):

Para crear este gráfico, utilicé el siguiente código...

set style line 1 lc rgb '#808080' lt 1 lw 2
set border 0 ls 1
set arrow from 0, graph 0 to 5, graph 0 nohead front ls 1
set arrow from graph 0,first 0 to graph 0, first 5 nohead front ls 1
set xtics nomirror
set ytics nomirror
set lmargin 10
set bmargin 3.5
set xrange [0:5]
set yrange [0:5]
set offsets graph 0.1, graph 0.1, graph 0.1, graph 0.1
plot 'example.txt'

... y datos.

#x  y
0   3.88222
1   4.20754
2   4.424
3   2.41443
4   1.95107
5   2.79098

En v5.4, este código da como resultado un gráfico sin compensaciones:

Desafortunadamente, la documentación no aborda rangos personalizados. No estoy seguro de si esto es un error, un problema con mi código o si la función de usar compensaciones y rangos personalizados se eliminó por completo en gnuplot v5.4.

¡Gracias de antemano!



------------------------------------

La sección de documentación para "compensación" es nNo es bueno en gnuplot versión 5.

Tengo entendido que el comportamiento actual (versión 5.4) es

las compensaciones solo afectan el escalado automático Los rangos de ejes explícitos tienen prioridad sobre el escalado automático, por lo que las compensaciones no tienen efecto si hay un rango explícito para ese eje. El estilo de gráfico que se muestra en la consulta se logra mejor en gnuplot 5.4 utilizando la palabra clave rangelimited, p. establezca el rango de tics limitado si desea esto en todos los ejes

Los siguientes comandos funcionan de la misma manera en las versiones 5.0 y 5.2 de gnuplot que en la versión 5.4, por lo que creo que este ejemplo no muestra un cambio repentino entre las dos versiones sino más bien una acumulación gradual de pequeñas diferencias entre las versiones 4. y 5. Presentaré un informe de error señalando la insuficiencia de la sección de documentación actual sobre "compensación"ot;.

Código revisado

# Modified for gnuplot version 5.4
set xtics rangelimited nomirror
set ytics rangelimited nomirror
set border 3
set offsets graph 0.1, graph 0.1, graph 0.1, graph 0.1
plot 'example.txt' with points



------------------------------------

Una observación extraña que puedo reproducir. El siguiente código minimizado se comporta de manera diferente en gnuplot 5.2 y gnuplot 5.4

reset session
set xrange[0:5]
set yrange[0:5]
set offset graph 0.1, graph 0.1, graph 0.1, graph 0.1
plot x

No estoy seguro de por qué es diferente. La siguiente solución, un poco engorrosa, conducirá al mismo resultado en gnuplot 5.2. y gnuplot 5.4 con el costo de volver a trazar. Pero espero que haya una solución más sencilla que actualmente no me resulta obvia. Quizás haya otra configuración en gnuplot 5.4 que "recupere" este comportamiento 5.2.

Código:

### "manual" offset for gnuplot 5.4
reset session

$Data <<EOD
#x  y
0   3.88222
1   4.20754
2   4.424
3   2.41443
4   1.95107
5   2.79098
EOD

set style line 1 lc rgb '#808080' lt 1 lw 2
set border 0 ls 1
set arrow from 0, graph 0 to 5, graph 0 nohead front ls 1
set arrow from graph 0,first 0 to graph 0, first 5 nohead front ls 1
set xtics nomirror
set ytics nomirror
set lmargin 10
set bmargin 3.5

set xrange [0:5]
set yrange [0:5]

xRange(a)  = GPVAL_X_MAX  -GPVAL_X_MIN
yRange(a)  = GPVAL_Y_MAX - GPVAL_Y_MIN
xOffMin(a) = GPVAL_X_MIN - a*xRange(a)
xOffMax(a) = GPVAL_X_MAX + a*xRange(a)
yOffMin(a) = GPVAL_Y_MIN - a*yRange(a)
yOffMax(a) = GPVAL_Y_MAX + a*yRange(a)

plot $Data

set xrange [xOffMin(0.1):xOffMax(0.1)]   # graph 0.1 
set yrange [yOffMin(0.1):xOffMax(0.1)]   # graph 0.1 

replot
### end of code

Resultado: (gnuplot 5.2y gnuplot 5.4)

Adición:

Bueno, estás configurando un rango x e y fijo y luego agregas un 10% de compensación adicional. Por lo tanto, puede configurar directamente xrange[-0.5:5.5] y establecer yrange[-0.5:5.5] o hacer un cálculo como en el siguiente código. Pero estoy de acuerdo en que si funcionara como en gnuplot 5.2, donde se establecen los rangos y luego se agrega un 10 % de compensación adicional, sería mucho más conveniente.

reset session
xMin=0
xMax=5
yMin=0
yMax=5
OffLeft   = 0.1
OffRight  = 0.1
OffTop    = 0.1
OffBottom = 0.1
xRange = xMax-xMin
yRange = yMax-yMin

set xrange[xMin-OffLeft  *xRange : xMin+OffRight*xRange]
set yrange[xMin-OffBottom*yRange : yMin+OffTop  *yRange]

plot x

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare