gnuplot: valores y definiciones de variables en el comando plot

Sep 24 2020

Me encontré con lo siguiente:

Según el manual de gnuplot, un elemento de la trama puede contener una definición.

Syntax: 

      plot {<ranges>} <plot-element> {, <plot-element>, <plot-element>}

Each plot element consists of a definition, a function, or a data source 
together with optional properties or modifiers: 

      plot-element:
           {<iteration>}
           <definition> | {sampling-range} <function> | <data source>
                        | keyentry
           {axes <axes>} {<title-spec>}
           {with <style>}

Mira el siguiente ejemplo:

  • Para el primer gráfico y=x+1se traza porque a=1se definió anteriormente. Como se esperaba.

  • Para el segundo gráfico y el primer comando de trazado, debería ser el mismo, pero en y=2*x+1su lugar se traza (dos veces).

  • En el tercer gráfico, cuando a=1se especifica explícitamente, se traza como se esperaba.

¿Por qué gnuplot ignora a=1el segundo gráfico? ¿He entendido mal algo?

Código:

### definitions in plot command
reset session

a = 1
b = 1
f(x) = a*x + b

set yrange[-40:40]
set multiplot layout 1,3
    plot     f(x)
    plot     f(x), a=2 f(x), a=3 f(x)
    plot a=1 f(x), a=2 f(x), a=3 f(x)
unset multiplot
### end of code

Resultado:

Respuestas

4 Ethan Sep 24 2020 at 11:29

Tu diagnóstico está un poco equivocado. En el segundo panel, la primera gráfica púrpura se superpone con la gráfica a = 3 en lugar de la gráfica a = 2.

¿Por qué? Porque gnuplot acumula todos los elementos de la trama completa antes de dibujar cualquiera de ellos. Esto implica hacer dos pasadas sobre la línea de comando. Una pasada para analizar y cargar datos de cualquier fuente de datos mencionada (necesaria, por ejemplo, para el ajuste de escala automático), luego una segunda pasada para evaluar cualquier función sobre el rango (que podría haberse determinado mediante el ajuste de escala automático). Durante la primera pasada aquí, a se establece en 2 y luego en 3. Al comienzo de la segunda pasada, a sigue siendo 3 y en ausencia de una definición inicial para cambiarlo, eso es lo que se usa cuando se evalúa f (x) .