Gnuplot

O návodu

Pro přečtení tohoto návodu nepotřebujete mít žádnou předchozí zkušenost s Gnuplotem ani s terminálem a můžete používat Windows. Návod vás provede psaním Gnuplotu od začátku až k pokročilejším fíčurám. Je stručný, nicméně doporučuji si paralelně se čtením příkazy zkoušet u sebe na PC – návod je tak psaný.

Co je Gnuplot?

GnuPlot je program, ve kterém můžete tvořit pěkné, vědecky vypadající grafy. Ovládá se tak, že mu říkáte co má dělat - píšete příkazy do příkazové řádky a on se podle nich zařídí. Pro instalaci stačí stáhnout instalační soubor z oficiální GnuPlot stránky.
Když si spustíte program, vyskočí na vás okno, kam můžete něco psát. Nyní ukážu příkazy, které tam můžete napsat, aby GnuPlot něco provedl.

Gnuplot funguje i na Linuxu jako terminálový program. Instaluje se pomocí příkazu, podobnému sudo apt-get install gnuplot (podle distra) a funguje stejně jako na Windowsu.

Příkaz plot

Napište zkusmo do terminálu následující kód a stiskněte enter:

    plot x**2
  

Vidíte snad, že se objevilo okno s grafem kvadratické funkce $x^2$, kterou GnuPlot vynesl na graf nějak takto:

graf kvadratické funkce v Gnuplotu


Můžete si na horní liště všimnout několika tlačítek, nejdůležitější je z nich tlačítko mřížky, jímž můžete načíst mřížku (nakreslit do grafu čtvercovou síť). To lze nahradit příkazem set grid a vypnout pomocí unset grid. Druhým tlačítkem zleva, můžete graf uložit jako obrázek. Ostatní tlačítka popisovat nebudu, můžete si je vyzkoušet sami. Příkaz plot tedy vykreslí do grafu to, co mu řekneme, co napíšeme dále (neboli co je v argumentu příkazu plot). Můžeme vykreslit funkce $\sin()$, $\cos()$, $\exp()$ atd., nezapomeňte však, že GnuPlot používá desetinnou tečku (ne čárku!) a mocnění se neznačí pomocí stříšky (^), nýbrž pomocí dvojitého násobení (**).
Je také možné vykreslit více funkcí naráz, oddělíme-li je čárkou, třeba takto:

	plot sin(x), cos(x)
	

Jak upravit graf

Někdy se stane, že graf funkce, kterou jsme vykreslili, neodpovídá našim požadavkům. Např. funkce vyvolaná příkazem plot sin(x)nemusí být zobrazená tak pěkně, jak bychom chtěli, navíc chybí popisky os a legenda není pěkná. Nyní si ukážeme, jak toto změnit.

Pokud si tyto příkazy uložíte do souboru s koncovkou .gnu, tak potom příkazy můžete načíst pouze příkazem load "cesta\k\souboru.gnu" (nebo jednoduše soubor přetáhněte do okna a stiskněte enter).
Pozn.: v Gnuplotu se můžete pohybovat mezi adresáři klasicky unixáckým cd.
Příkazy:

	set ylabel "y"
set xlabel "x"
set xrange [0:6.5]
set xtics 0.5*3.14159
set title "Sinusoida"
plot sin(x) title "y=sin(x)"

	

Z těchto příkazů konkrétně vyjde takovýto graf:

graf sinusoidy


Další příkazy, které jsem nyní nezmínil, ale mohly by se hodit:

Jak vynášet data do grafu

Může se stát, že budete chtít vynést svoje vlastní data, třeba z experimentu, do grafu. V tomto případě Gnuplot může pomoci. Stačí si vytvořit soubor (ideálně .txt, myslím, že jde i .csv), ve kterém budou následovně data:

	#Popisekx	Popiseky
Hodnotax1	Hodnotax2
...

	

Data mohou být oddělena jak tabulátorem, tak mezerou. Křížek # značí komentář, to, co je za ním, Gnuplot ignoruje.
Následně příkazem plot "cesta\k\souboru.txt" vyvoláte data. Pokud neumíte najít cestu k souboru, přetáhněte soubor do Gnuplotu a přepište load na plot u příkazu, který se tam vytvoří.

Otestujte si vynášení dat tím, že zkusíme vytvořit ten samý graf jako v jedné úloze z korespondenčního semináře Výfuku. Nejdřív si proto napišme data do správného formátu (pozor, musí mít desetinné tečky):

	#m/kg	t/s
0.1	24
0.2	44
0.3	56
0.4	70
0.5	86
0.6	99
0.7	113
0.8	136
0.9	151
1.0	165

	

Data pak uložíme do souboru s názvem data.txt (ale může to být i jiný název) a následně je vyneseme pomocí příkazu plot "data.txt". Dostaneme pak tento výstup:

graf naměřených dat, které jsou zhruba rozmístěné na přímce


Pozn.: Určitě jste se ve škole učili, že při vynášení naměřených dat do grafu se za žádnou cenu nesmí propojovat jednotlivé body - naměřené hodnoty. Kdybyste to však přeci jen chtěli udělat, tak za cestu k souboru v příkazu plot napište: plot "data.txt" with lines.

Jak fitovat

Pravděpodobně se stane, že budete někdy mít vynesena nějaká data, a budete je chtít fitovat, neboli proložit funkcí. I to lze v Gnuplotu provést. Ukážeme si to na příkladu dat z minulé Výfučí úlohy. Uvedu zde návod krok po kroku, jak se to dělá:

  1. Nejdřív musíte odhadnout, jaký tvar má funkce, kterou chcete graf proložit. V tomto případě to nejspíše bude lineární závislost, neboli $f(x) = a\cdot x+c$.
  2. Funkci si v gnuplotu nadefinujme tak, že napíšeme do terminálu její předpis – f(x) = a*x+c.
    1. Všimněte si, že proměnná je $x$, ale $a$ i $c$ jsou parametry, které nevíme.
  3. Nyní musí program vypočíst všechny parametry. Napište proto:
  4. 	fit f(x) "data.txt" via a, c
    	
    1. Program vám vypíše vypočtené fitovací konstanty, které se mohou hodit.
  5. Nakonec vyneseme jak funkci f(x) tak data do grafu takto:
	plot 'data.txt' title 'naměřená data', f(x) title 'lineární fit'
	

Měl by vyjít takovýto graf:

graf s daty i fitem


Samozřejmě můžete zkusit data proložit i jinými závislostmi, ale pak při příkazu fit musíte při via uvést všechny parametry. Nejistotu fitu najdete ve výpisu programu.

Důležité: gnuplot fity dělá svým vlastním numerickým algoritmem. Tento algoritmus funguje, jen pokud hodnoty čísel zkonvergují. Nemusí zkonvergovat, pokud zadáte parametr, u kterého jen malá změna vyústí ve velkou změnu funkce. Třeba máme-li funkci f(x)=a*(1+x/b), tak pokud je b malé, je tento fit nestabilní. Raději použijte v tom případě ekvivalentní fit f(x)=a*(b+x).

Další vymoženosti Gnuplotu

  1. Lze vykreslovat i 3D grafy. Stačí mít soubor dat se třemi sloupci, nebo funkci o dvou proměnných. Stará se o to funkce splot. Zkuste si zadat následující řádek a uvidíte:
  2. 	splot x**2+y**2
    	
  3. Lze vykreslovat i errorbary (chybové úsečky). Stačí k tomu mít soubor s daty se třemi sloupečky, kde třetí sloupec jsou chybové úsečky v ose $y$ a napsat:
  4. 	plot “cesta\k\souboru.txt” with yerrorbars
    
    	
  5. Lze si vybrat barvu a typ čáry pro plotovaná data. K tomu si přečtěte dokumentaci, základní změna barvy se provede následujícím příkazem (lt znamená line type a colour je nějaká předdefinovaná barva):
  6. 	plot sin(x) lt rgb "colour",
    	
  7. set decimalsign ‘,’
  8. set encoding utf8 pro české znaky
  9. set dt (číslo) změní typ přerušované čáry (dash type), což se hodí pro černobílý tisk.
  10. set key spacing 1.5zvětší legendu, aby byla čitelnější.

Jak psát LaTeXové popisky os

Gnuplot má různé tzv. terminály, které značí, v jakém formátu bude výstup. Jeden z nich je i LaTeXový formát, který se hodí, když chcete mít řecká písmena v popiscích os. Používá se následovně:

	set term epslatex enhanced standalone
set output “sample.tex”
plot x**2
set output

	

Tímto se vytvoří soubor sample.tex a sample.eps ve složce, kde operujete. Nyní v terminálu musíte soubor zkompilovat pomocí pdflatex sample.tex. Můžete ale kompilovat i z gnuplotu pomocí

	system('latex fig1.tex && dvips fig1.dvi && ps2pdf fig1.ps')

	

Samozřejmě se vzniklý sample.tex dá kompilovat i v nějakém editoru, přes terminál je to nicméně pohodlnější. Pro tento typ kompilace výrazně doporučuji používat load "plot.gnu".