Gnuplot
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ý.
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.
Napište zkusmo do terminálu následující kód a stiskněte enter:
Vidíte snad, že se objevilo okno s grafem kvadratické funkce $x^2$, kterou GnuPlot vynesl na graf nějak takto:
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:
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.
set ylabel "y"
a set xlabel "x"
dodáme popisky os.set title "Sinusoida"
nastavíme název grafu.set xrange[0:6.5]
upravíme rozsah osy $x$.set xtics 0.5*3.14159
nastavíme, že se na ose $x$ čísluje po půl pí (pí zaokrouhluji na $3.14159$).plot sin(x) title "y=sin(x)"
.
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:
Z těchto příkazů konkrétně vyjde takovýto graf:
Další příkazy, které jsem nyní nezmínil, ale mohly by se hodit:
set logscale x základ
→ logaritmická škálaset format x "$10^{%L}$"
→ logaritmický popis osy xset format x "%.1f"
→ jedno desetinné místo na ose xset key left
(nebo right bottom top) → pozice legendyunset key
→ vypne legenduhelp
→ nápovědaMůž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:
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):
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. 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
.
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á:
f(x) = a*x+c
.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. 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)
.
lt
znamená line type a colour
je nějaká předdefinovaná barva):set decimalsign ','
set encoding utf8
pro české znakyset dt (číslo)
změní typ přerušované čáry (dash type), což se hodí pro černobílý tisk.set key spacing 1.5
zvětší legendu, aby byla čitelnější.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ě:
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í
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"
.
Pomohl Vám článek o Gnuplotu? Třeba Vám pomůže i můj návod na LaTeX nebo si můžete přečíst některý z mých článků např. o učení se cizích jazyků či diferenciálním počtu.