gnuplot: valori e definizioni delle variabili nel comando plot

Sep 24 2020

Mi sono appena imbattuto in quanto segue:

Secondo il manuale di gnuplot un elemento della trama può contenere una definizione.

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>}

Controlla il seguente esempio:

  • Per il primo grafico y=x+1viene tracciato perché è a=1stato definito in precedenza. Come previsto.

  • Per il secondo grafico e il primo comando di trama dovrebbe essere lo stesso ma y=2*x+1viene invece tracciato (due volte).

  • Nel terzo grafico, quando a=1è esplicitamente specificato, viene tracciato come previsto.

Perché gnuplot ignora a=1il secondo grafico? Ho frainteso qualcosa?

Codice:

### 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

Risultato:

Risposte

4 Ethan Sep 24 2020 at 11:29

La tua diagnosi è leggermente sbagliata. Nel secondo pannello il primo grafico viola è sovrapposto al grafico a = 3 anziché al grafico a = 2.

Perché? Perché gnuplot accumula tutti gli elementi dell'intero grafico prima di disegnarne uno. Ciò comporta l'esecuzione di due passaggi sulla riga di comando. Un passaggio per analizzare e caricare i dati da qualsiasi origine dati menzionata (necessario ad esempio per la scalabilità automatica), quindi un secondo passaggio per valutare eventuali funzioni nell'intervallo (che potrebbe essere determinato dalla scalabilità automatica). Durante il primo passaggio qui, a viene impostato a 2 e poi a 3. All'inizio del secondo passaggio a è ancora 3 e in assenza di una definizione iniziale per cambiarlo è ciò che viene utilizzato quando viene valutato f (x) .