Gnuplot howto oldal - Scriptek

A gnuplot nem csak interaktív módban képes fogadni a parancsokat, hanem scriptek formájában fileból is tudja olvasni. A script egy olyan file, melyben gnuplotparancsok találhatók, ezeket sorban végrehajtja a program. Konvenció, hogy .plt végződést adunk a gnuplot scripteknek.

Script írása

Tetszőleges szerkesztővel írhatunk scriptet, álljon itt egy egyszerű példa (rajzol.plt)
p [0:2*pi] sin(x) w l lt -1 lw 2
pause -1 "Nyomj entert!"
A pause -1 utasítás kiír egy üzenetet majd vár enterre, erről majd később.

Script futtatása

Legegyszerűbb a
neumann ~ > gnuplot rajzol.plt
módon futtatni a scriptet, ekkor megjelenik a fekete szinuszgörbe, vár egy entert, majd kilép egészen. A shell egyik jó tulajdonsága, hogy ha futtatási jogot adunk a .plt fileunknak,
neumann ~ > chmod +ox rajzol.plt
és beszúrjuk az első sornak, hogy
#!/usr/bin/gnuplot
akkor egyszerűen a shellből indítva is lefut, hiszen a shell kitalálja az első sorból, hogy milyen programot kell meghívni. Ehhez persze az kell, hogy a gnuplot program tényleg ott is legyen. Erről a which gnuplot paranccsal győződhetünk meg.

Harmadik módja a futtatásnak a load parancs:

script betöltése interpreter módban

Ha már beléptünk a gnuplotba, a load parancs hívásával
gnuplot> load "rajzol.plt"
szintén lefut a script, de utána nem lép ki egészen, hanem visszakapjuk a gnuplot promptot. Egyik fontos alkalmazása a loadnak, hogy a save (lásd lejjebb) paranccsal elmentett parancssorozatot reprodukálja. A script tartalmazhat loadot, egymásba ágyazni lehet.

A negyedik módja a futtatásnak lehetőséget biztosít az argumentumátadásra is:

A call parancs - scripthívás argumentumátadással

gnuplot> call "argumentumos.plt" "vacak" 1 3 -1
ahol az argumentumos.plt pl. a következő sorból áll:
plot $0 using $1:$2 w l lt $3
Az eredeti dollárjelet $$ kombinációval kelthetjük életre.

Parancsok mentése

Előfordulhat, hogy kínkeservvel létrehoztunk egy grafikont. Hogy reprodukálhassuk, mentsünk:
gnuplot> save "rajzom.plt"
Ennek loaddal való meghívása visszavarázsolja a grafikont. Elmentésre kerülnek ugyanis a felhasználói függvények, változók, beállítások és az utolsó plot vagy splot parancs. Ha csak az egyik típusú adatot akarjuk menteni:
gnuplot> save var "valtozok.dat"
gnuplot> save functions "fv.dat"
gnuplot> save set "beallitasok.dat"
A kimentett script nem csak az általunk adott beállításokat, hanem minden egyéb beállítás alapértelmezését is tartalmazza.

A pause parancs - szünetjel

A pause parancs segítségével kiírást helyezhetünk el a terminálon, pl. egy entert kérve és várhatunk szám másodpercig:
gnuplot> pause szam "szoveg"
A szöveg elhagyható. Ha a szám nulla, nincs várakozás, ha -1, akkor enterig vár.

Feltételes végrehajtás

Feltételes végrehajtáshoz használhatjuk az if utasítást:
gnuplot if (logikai_kif) parancs1; parancs2; parancs3
A logikai_kif helyére logikai műveletek eredménye kerülhet, pl. a!=b. Tetszőleges számú parancsot írhatunk pontosvesszővel elválasztva, ezeket mind feltételesen hajtja végre.

A jelen verzióban nincs else, de még goto sincs.

Ciklusszervezés

A reread parancs scriptekben értelmes, azt jelenti, hogy előről kezdi végrehajtani a filét. Ciklusszervezésre alkalmas az iffel kombinálva, ehhez azonban (naívan gondolva) két script szükséges:

Az egyik pl. ciklusmag.plt névre hallgasson:

a=a+0.2
plot x**a
if (hatar>a) reread
A másik a ciklusmag környezete:
a=0
hatar=10
set xrange [0:1]
set multiplot
call 'ciklusmag.plt'
set nomultiplot

A set multiplot és nomultiplot arra való, hogy a külön plot parancsokkal kirajzolt ábrák egy képen jelenjenek meg egymásrarajzolva. A kirajzolás akkor történik meg, amikor a set nomultiplothoz ér a script.

Azért kellett két script, mert az, amelyikben a reread van, minden ciklusban lefut, ezért ott a kezdeti ciklusváltozóértéket nem lehet rögzíteni. De legyünk ravaszak, és emlékezzünk, hogy van egy pi nevű előredefiniált változónk. A következő script ugyanaszt teszi, mint az előző scriptpár.

if(pi<3.141928) set multiplot; set xrange [0:1]
pi=pi+0.2 
a=pi-3.1415927
plot x**a
if(a<2) reread
set nomultiplot
pause -1
pi=2*asin(1)
Borsányi Szabolcs

  fizikus