====== Gnuplot: grafy neznetvořte, ale tvořte ======
//Při řešení experimentální úlohy jsi si jistě všiml(a), že nezanedbatelnou část tvé práce zabere zpracování dat. Toto zpracování je nadmíru důležité, neboť podle výstupů se mohou ostatní lidé přesvědčit, jestli experiment proběhl dobře a obsahuje zajímavý výsledek. Čím hezčí a přehlednější tvé řešení bude, tím větší je šance, že ostatní zaujme a že se mu povede předat zamýšlenou zprávu.//
//Nedílnou součást prezentace měření jsou i~grafy a pokud je netvoříš ručně, jako se to dělalo dříve, závisí jejich úspěch na softwaru, který si vybereš k~jejich tvorbě. Na této stránce předvedeme program jménem Gnuplot, ve kterém můžeš tvořit pěkné, vědecky vypadající grafy. Používáme jej ve Výfuku na vynášení grafů naměřených dat ve vzorových řešeních experimentálních úloh a nemůžeme si jej vynachválit. Pokud budeš tento návod pozorně sledovat a program si nainstaluješ, jsme přesvědčeni, že přehledné grafy zvládneš tvořit i~ty!//
===== Princip programu =====
Gnuplot se neovládá tak jako většina běžných programů typu MS~Excel. Ovládá se tak, že mu říkáme, co má dělat~-- píšeme příkazy do příkazové řádky a on se podle nich zařídí. Je to podobné jako kdybychom si povídali s~kamarádem (jen váš kamarád pravděpodobně nedokáže kreslit tak pěkné grafy). Kdo umí řeč Gnuplotu, tvoří grafy tak, že jen řekne „vytvoř graf“.
===== Instalace =====
Pro instalaci si stačí stáhnout [[https://sourceforge.net/projects/gnuplot/files/gnuplot/|instalační soubor]] (kliknutím na //Download latest version//) z~oficiální gnuplotí stránky, soubor spustit a řídit se instalačními instrukcemi.
Následně program můžete spustit, když si jej vyhledáte v~programech (//Start// --> napiš //Gnuplot// --> Enter), či poklikáte na jeho ikonu ''wgnuplot.exe''. Po spuštění se objeví prosté okno, do kterého můžete něco napsat. Na následujících řádcích vás naučíme příkazy, pomocí kterých Gnuplot splní vaše přání.
===== Příkaz plot =====
Nejdůležitější příkaz se jmenuje ''plot'' (anglicky "vykreslit" [graf]). Zkuste ho nyní použít tím, že zadáte následující příkaz (napíšete a stisknete Enter):
plot x**2
Mělo by se nyní objevit okno s~grafem kvadratické funkce $y=x^2$, což se dalo očekávat.
{{ :jak_resit:gnuplot1.png |}}
Příkaz plot tedy vykreslí do grafu to, co mu řekneme, tedy to, co napíšeme za ním (neboli co je v~argumentu příkazu plot). Můžeme vykreslit funkce $\sin(x)$, $\cos(x)$ , $\exp(x)$ atd.,((Nic si nedělejte z toho, že tyto funkce neznáte, zatím nejsou potřeba.)) nezapomínejme 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í~(**). Můžete si zkusit vynést další funkce, například lineární funkci ''y=2*x+4'' nebo odmocninnou funkci $y=\sqrt{-x+5}$ (pomocí příkazu ''sqrt(-x+5)''). Je také možné vykreslit více funkcí naráz, oddělíme-li je čárkou, třeba takto:
plot sin(x), cos(x)
Na horní liště si můžeme všimnout několika tlačítek; nejdůležitější je z~nich je tlačítko mřížky, jímž je možno 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 si popisovat nebudeme, protože si je můžete vyzkoušet sami.
===== 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.
* Pomocí ''set ylabel 'y' '' a ''set xlabel 'x' '' dodáme((Jako uvozovky lze použít buď ''"'' nebo '' ' '', je to jedno.)) popisky os.
* Pomocí ''set title 'Sinusoida' '' nastavíme název grafu.
* Pomocí ''set xrange[0:6.5]'' upravíme rozsah osy~$x$.
* Pomocí ''set xtics 0.5*3.14159'' nastavíme, že se na ose čísluje po půl pí.
* Nakonec můžeme graf vykreslit a přejmenovat jeho legendu příkazem ''plot sin(x) title 'y=sin(x)' ''.
Pokud si tyto příkazy uložíme do souboru s~koncovkou ''.gnu'', tak je potom můžeme načíst pouze příkazem ''load 'cesta_k_souboru.gnu' '' (nebo se dá soubor jednoduše přetáhnout do okna a stisknout Enter). Tyto příkazy jsme tedy použili:
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)"
a vyšel z~nich graf níže. Ještě jsme mohli použít příkaz ''set key left'' (nebo right nebo bottom nebo top nebo center) pro přenastavení pozice legendy.
{{ :jak_resit:gnuplot2.png |}}
===== Jak vynášet data do grafu =====
Může se stát, že budeme 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 s~koncovkou ''.txt'' nebo ''.csv'', ve kterém budou následovně data:
#Popisek x Popisek y
Hodnotax1 Hodnotax2
...
Data mohou být oddělena jak tabulátorem, tak mezerou. Křížek ''#'' značí komentář a to, co je za ním, Gnuplot ignoruje.
Následně příkazem ''plot 'cesta_k_souboru.txt' '' lze vykreslit data. Pokud nemůžeme najít cestu k~souboru, stačí jej do Gnuplotu přetáhnout a přepsat ''load'' na ''plot'' u~příkazu, který se tam objeví.
Otestujme si vynášení dat tím, že zkusíme vytvořit ten samý graf jako v~jedné úloze z~Výfuku. Nejdřív si proto napišme data do správného formátu (opět 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:
{{ :jak_resit:gnuplot3.png |}}
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. Kdybychom však přeci jen body propojit potřebovali, tak za cestu k~souboru v~příkazu ''plot'' napíšeme:
plot "data.txt" with lines
===== Jak fitovat =====
Pravděpodobně se stane, že někdy budeme mít vynesena nějaká data, a budeme 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. Uvedeme zde návod krok po kroku, jak se to dělá:
- Nejdřív musíme odhadnout, jaký tvar má funkce, kterou chceme graf proložit. V~tomto případě to nejspíše bude lineární závislost, neboli $f=x\cdot a+c$.
- Funkci si v~gnuplotu nadefinujme tak, že napíšeme do terminálu její předpis: ''f(x) = a*x+c''.
* Všimněte si, že proměnná je $x$, ale $a$ i~$c$ jsou parametry, které zatím nevíme.
- Nyní musí program vypočíst všechny neznámé parametry. Napište proto: ''fit f(x) 'data.txt' via a, c''
* Program vám vypíše vypočtené fitovací konstanty s~nejistotami, které se mohou hodit.
- 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:
{{ :jak_resit:gnuplot4.png |}}
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.
===== Další vymoženosti Gnuplotu =====
* 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 (se vzniklým grafem jde i~manipulovat myší):
splot x**2 + y**2
* 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 $x$ a napsat
plot "cesta_k_souboru.txt" with yerrorbars
* Lze si také vybrat barvu a typ čáry pro plotovaná data. Základní změna barvy se provede následujícím příkazem (''lt'' znamená //line type// a ''colour'' nahraďte nějakou předdefinovanou barvou, třeba ''blue''):
plot sin(x) lt rgb "colour"
* Příkaz ''set decimalsign ',' '' nastaví desetinnou čárku.
* Příkaz ''set encoding utf8'' povolí české znaky.
===== 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 (ta lze změnit pomocí ''cd 'cesta_ke_složce' ''). Nyní v~terminálu musíte soubor zkompilovat pomocí ''pdflatex sample.tex''. Můžete ale kompilovat i~z~gnuplotu pomocí příkazu
system('pdflatex sample.tex')