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 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.
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.,1) 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 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 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:
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:
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 acolour
nahraďte nějakou předdefinovanou barvou, třebablue
):
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')