gnuplot: wartości zmiennych i definicje w poleceniu plot

Sep 24 2020

Właśnie natknąłem się na następujące:

Zgodnie z instrukcją gnuplot element plot może zawierać definicję.

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

Sprawdź następujący przykład:

  • Na pierwszym wykresie y=x+1jest wykreślany, ponieważ a=1został zdefiniowany wcześniej. Zgodnie z oczekiwaniami.

  • Dla drugiego wykresu i pierwszego polecenia wykresu powinno być takie samo, ale y=2*x+1zamiast tego jest wykreślane (dwukrotnie).

  • Na trzecim wykresie, gdy a=1jest wyraźnie określony, jest wykreślany zgodnie z oczekiwaniami.

Dlaczego gnuplot ignoruje a=1drugi wykres? Czy coś źle zrozumiałem?

Kod:

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

Wynik:

Odpowiedzi

4 Ethan Sep 24 2020 at 11:29

Twoja diagnoza jest nieco błędna. W drugim panelu na pierwszy, fioletowy wykres nałożono wykres a = 3 zamiast wykresu a = 2.

Dlaczego? Ponieważ gnuplot gromadzi wszystkie elementy pełnej fabuły przed faktycznym narysowaniem któregokolwiek z nich. Obejmuje to wykonanie dwóch przejść przez linię poleceń. Jeden przebieg do analizowania i ładowania danych z dowolnych wymienionych źródeł danych (potrzebnych na przykład do autoskalowania), a następnie drugi przebieg do oceny funkcji w zakresie (który mógł zostać określony przez autoskalowanie). Podczas pierwszego przebiegu tutaj a zostaje ustawione na 2, a następnie na 3. Na początku drugiego przebiegu a jest nadal 3 i przy braku początkowej definicji, aby ją zmienić, to jest to, co jest używane, gdy obliczane jest f (x) .