Hlavní navigace

Gnuplot: skriptování

Petr Pinkas 5. 9. 2001

Prozatím jsme se o gnuplotu bavili pouze jako o programu, který nám umožňuje vykreslovat grafy. Ale gnuplot podporuje i další příkazy, díky čemuž jej můžeme použít jako jednoduchý skriptovací jazyk - orientovaný ovšem na kreslení funkcí a zpracování datových souborů.

V dnešním dílu se ve stručnosti podíváme na všechny příkazy, které dává gnuplot k dispozici. Je jich celkem dvaadvacet, ty nejdůležitější z nich jsme již probrali v předchozích dílech, o jiných byla zmínka jen okrajově. Pro přehlednost je popíšu v abecedním řazení a u těch složitějších bude uveden příklad demonstrující jejich použitelnost.

cd

Dělá to, co všichni očekáváte – mění pracovní adresář. Pouze pozor na to, že cesta musí být uzavřena do uvozovek nebo apostrofů. Kdyby snad někdo pracoval ve windowsech (dosu), jsou nutné apostrofy, protože obrácené lomítko má v uvozovkách speciální význam.

call

Tento příkaz slouží k volání souboru s příkazy gnuplotu. Stejnou funkci má i příkaz load, ale voláním přes call můžeme do skriptu předat až deset parametrů.

Má tuto syntaxi:

  call "soubor" par0 par1 ... par9

Parametr soubor musí být uzavřen do uvozovek nebo apostrofů a doporučuje se, aby i každý další parametr byl v uvozovkách. Některé verze gnuplotu mohou totiž parametry v uvozovkách a bez nich zpracovávat odlišným způsobem.

Při zpracovávání souboru je každá řádka testována na výskyt tzv. dollar sequence následované číslem nula až devět ($0 – $9). Je-li nalezena, je nahrazena odpovídajícím argumentem za příkazem call. Jiný znak než číslo je nahrazen oním znakem (např. „$$“ je tedy „$“). Použitý parametr, který není při volání souboru uveden, bude ignorován.

Řekněme, že soubor calltest.gp obsahuje následující řádku:

  print "$1 $$$3"

Na příkazové řádce potom zadáme

  call "calltest.gp" Zadane cislo je 4.0

Jako výsledek dostaneme výpis

  cislo $4.0

protože jsem nechali vypsat druhý a čtvrtý parametr (čísluje se od nuly).

clear

Tento příkaz maže grafickou obrazovku, případně použité výstupní zařízení. Na některých terminálech (set terminal) maže pouze aktivní část plochy danou příkazem set size a ve spojení s příkazem set multicolumn může být použit pro vytvoření obrazového výseku.

exit

Voláním exit ukončíme právě prováděný dávkový soubor nebo interaktivní režim. Před ukončením je smazána grafická obrazovka. Stejnou funkci má i příkaz quit.

fit

Vypočítává parametry zvolené křivky tak, aby co nejlépe proložila body v zadaném datovém souboru. Podrobně byl probrán v minulém dílu.

help

V interaktivním režimu slouží k vypsání nápovědy. Více jsme si o něm řekli v prvním dílu tohoto seriálu.

if

Příkaz if slouží k podmíněnému vykonávání příkazu gnuplotu. Podmínka za tímto příkazem (uzavřená do kulatých závorek) je vyhodnocena a v případě, že není pravdivá, je celý zbytek řádky přeskočen. Jinak se provede posloupnost příkazů ze zbytku řádky (může jich tam být libovolně mnoho, oddělených středníky).

Ve spojení s příkazem reread je možné jej využít k vytvoření iteračních smyček (příklad u příkazu reread).

  if (a != 0) plot (a < 0) ? a*sin(x) : a*cos(x)

load

Tento příkaz pracuje stejně jako příkaz call popsaný výše, ale nepředává do skriptu žádné parametry. Má tedy pouze jeden parametr, a to název volaného souboru.

Můžeme zde využít i jeden speciální soubor, pomlčku („-“). Tím se předá řízení na standardní vstup, tzn. přeruší se běh skriptu, pustí se interaktivní režim a po jeho skončení je řízení opět předáno skriptu. Tohoto triku se využívá, chceme-li dát uživateli možnost ovlivnit něco v průběhu práce.

Příkazy call a load mají jednu zvláštnost: musí být uvedeny jako poslední příkaz na řádce.

pause

Jak správně očekáváte, slouží k pozastavení práce skriptu. Má tuto syntaxi

  pause sekund "text"

Pokud zadáme kladné číslo, čeká daný počet sekund, nula funguje jako příkaz print. Zvláštností je číslo –1, při jeho zadání se čeká na stisk klávesy enter.

  pause -1 "Stiskni enter..."

plot

plot je hlavní příkaz pro kreslení grafů. Pracuje v 2D a všechno důležité o něm bylo řečeno v druhém a třetím dílu tohoto seriálu. Pokud bychom chtěli kreslit trojrozměrné grafy, použijeme příkaz splot.

print

Někdy můžeme chtít vypisovat na obrazovku potřebné údaje. Slouží k tomu příkaz print. Jako parametry tohoto příkazu můžeme uvést cokoliv, co dokáže gnuplot vyhodnotit. Nejčastěji to bývají řetězce (v uvozovkách nebo apostrofech), názvy proměnných, případně celé matematické výrazy.

pwd

Co říct více k tomuto příkazu. Je bez parametrů a dává pouze informaci o tom, jaký je aktuální pracovní adresář. Nejlepší rovnou vyzkoušet ;).

quit

Ukončuje interaktivní režim nebo právě probíhající skript gnuplotu. Stejnou funkci má i jiný příkaz, ale jeho název neprozradím.

replot

Tak, zase jeden z těch „zajímavějších“ příkazů, kvůli kterým stojí za to tento díl napsat. Příkaz replot zopakuje poslední příkaz plot se všemi jeho předchozími parametry. Může to být výhodné při posílání jednoho grafu na několik různých terminálů.

Za příkazem replot můžeme uvést všechno to, co za příkazem plot, pouze nelze specifikovat rozsah hodnot. Pokud jsou nějaké parametry uvedeny, budou připojeny k předchozímu příkazu plot a odděleny od něho čárkou. Například zapíšeme-li

  plot sin(x)
  replot cos(x)

dostaneme nejprve graf sinusovky a na dalším obrázku grafy funkcí sinus a cosinus najednou.

Příkaz replot nepracuje v prostředí multicolumn, protože překresluje pouze poslední graf a ne celou obrazovku.

reread

Toto je jednoduchý nástroj pro vytváření iteračních smyček. Příkazem reread donutíme právě probíhající skript, aby se spustil od první řádky. Reprezentuje tedy nekonečnou smyčku, proto se často využívá ve spojení s příkazem if.

Předpokládejme soubor cyklus.gp obsahující

  a = a + 1
  plot sin(a*x)
  pause -1 "Stiskni enter..."
  if(a < 5) reread

V interaktivním režimu pak zadáme pouze

  a = 1
  load 'cyklus.gp'

reset

Vše, co lze v gnuplotu ovlivnit příkazem set, bude po použití tohoto klíčového slova nastaveno na defaultní hodnotu, jedinými výjimkami jsou proměnné terminal a output. Použití je tedy jasné, máme-li už provedeno mnoho změn, nemusíme gnuplot shodit a znovu nahodit, stačí pouze resetovat.

save

Často se při tvorbě grafu pracuje v interaktivním prostředí. Obrázek se vytváří a dolaďuje postupně, aby byl nakonec přepsán do skriptu. Problém s přesným přepsáním předešlých kroků do skriptů řeší příkaz save. Má tuto syntaxi

  save volba "název_souboru"

Jediným povinným parametrem je název_souboru. Bez přepínače volba pracuje příkaz tak, že veškerá nastavení prostředí gnuplotu, uživatelem definované proměnné a funkce a také poslední příkaz plot uloží do zadaného textového souboru. Získáme tak vlastně námi požadovaný skript (resp. spíš definici vzhledu grafu).

Jako volbu máme tyto možnosti:

  • functions – uloží pouze námi definované funkce
  • variables – uloží pouze námi definované proměnné

Zpět do prostředí gnuplotu může být takovýto skript nahrán příkazem load.

set (show)

Tato dvojice příkazů slouží k nastavení (resp. přečtení) hodnot parametrů prostředí. V gnuplotu je jich strašná spousta a popis jednotlivých položek by sám o sobě vydal na dlouhý seriál.

Budete-li hledat nějaký parametr a nebudete si moci vzpomenout na jeho jméno (případně ho ani netušíte), napište pouze příkaz set a dostane se vám přehledného výpisu všech možností. Tak se snad jednoduše dopátráte.

Aktuální nastavení všech parametrů víceméně přirozenou angličtinou dostanete příkazem show all.

splot

splot slouží ke kreslení trojrozměrných grafů (snad surface plot). Bohužel jej moc nepoužívám, takže jsem mu nevěnoval samostatný díl, i když by si to určitě zasloužil.

Je velice podobný „jednoduchému“ příkazu plot. Všechny informace u něj uvedené platí i pro splot, až na drobná omezení (použitelné jsou pouze styly lines, points, linespoints, dots a impulses, není podporováno zobrazování chyb (v mé verzi 3.7)) a naopak některé věci navíc (více formátů datových souborů včetně binárního).

test

Příkazem test můžeme nechat vytisknout testovací stránku pro nastavený terminál. Jsou na něm vidět například použitelné styly bodů a čar, rozlišení a kvalita umísťování textu.

update

Tento příkaz slouží k uchování parametrů vypočtených příkazem fit. Můžeme to potřebovat například ke znovuspuštění přerušeného výpočtu (viz čtvrtý díl této série). Za tímto příkazem uvedeme pouze název souboru.

Závěr

Tento díl vlastně není článkem jako takovým. Jde o stručný přehled příkazů, ale podle mne by v seriálu o gnuplotu neměl chybět. Tomu, kdo s gnuplotem začíná, a takovým je tento seriál určen především, by to mohlo hodně pomoci, ostatní snad budou shovívaví.

Příští díl už bude poslední a také trochu netradiční. Nebude se věnovat jen jednomu tématu, bude spíše souhrnem „zajímavostí“, které mohou pomoci vytvářet opravdu pěkné grafy.

Našli jste v článku chybu?

24. 10. 2002 11:22

Petr Sommer (neregistrovaný)

Lze nejak docilit aby se label umistil k nejakemu bodu? Tedy aby se sam prizpusobil tak aby nezasahoval do vlastni cary grafu.

Take se mi nepodarilo najit prikaz k nastaveni nejakeho pozadi pod graf, nevite jestli to lze?

(pouzivam ver 3.7pl2)

dik za radu.







6. 9. 2001 2:08

Petr Mikulik (neregistrovaný)

V aktualni vyvojove verzi (zdrojaky ze sourceforge) to jde. Viz posledni odstavec u 'help label'.





Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky