Octave nabízí spoustu funkcí, které umožňují tvorbu grafů. My se zaměříme na 2D grafy, které budeme tvořit pomocí funkce plot. Tato funkce obsahuje velké množství parametrů a my se zaměčíme na ty nejzákladnější. Pokud si budete chtít prostudovat i další možnosti, podívejte se prosím do dokumentace nebo v Octave spušťte příkaz help plot.
První graf¶
Začneme zlehka a podívame se co se stane, když si vykreslíme vektor obsahující tři hodnoty. Do proměnné uložíme vektor
a=[2 1 4 3 5]a =
2 1 4 3 5
Nyní zavoláme funkci plot a jako argument použijeme vektor .
POZOR: V kódu se vyskytuje řádek set(gcf,'Visible','on'). Ten prosím směle ignorujte, je zde pouze pro potřeby generování webové stránky (v Octave jej není potřeba zadávat).
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(a)
*Co se vlastně vykreslilo? *
Na ose jsou postupně vykresleny jednotlivé hodnoty vektoru .
Protože jsme zadali pouze jeden vstupní vektor, hodnoty na ose se určili automaticky jako posloupnost od 1 do 5.
Funkce plot navíc jednotlivé body spojila pomocí přímek.
Povšimněte si, že Octave automaticky zvolil rozsah os a tak, aby se celý graf “vlezl do obrázku”.
Takovéto použití funkce plot jistě lze v některých situacích využít, ale automatická volba hodnot na ose je velmi limitující. Proto si nyní ukážeme, jak upravit kód aby bylo možno volit i hodnoty na ose .
Složitější graf¶
Řekněme, že chceme vykreslit graf, který bude tvořen následujícími body (v daném pořadí): a . Abychom takový graf mohli vykreslit, musíme ze souřadnic zjistit hodnoty na osách a (z každého vektoru vybereme první respektive druhou hodnotu). Pro přehlednost budeme tyto hodnoty rovnou ukládat do proměnných a .
x=[1 3 6]
y=[3 2 4]x =
1 3 6
y =
3 2 4
Nyní můžeme zavolat funkci plot a vektory a použijeme jako parametry.
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,y)
Mějte na paměti, že u parametrů funkce je třeba dodržet dané pořadí. Octave se “nedívá” na pojmenování proměnných, takže pokud bychom prohodily a , bude si myslet, že jsme to tak chtěli provést. Ostatně, výsledek si můžeme prohlédnout:
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(y,x)
Nyní již umíme vykreslit graf, nicméně potřebujeme k tomu znát souřadnice všech bodů, které chceme vykreslit. Pokud bychom ale takto chtěli vykreslit například graf funkce na intervalu , museli bychom vypočítat spoustu bodů této funkce a navíc je pracně zadávat do vektorů a . Naštěstí můžeme použít jiné funkce Octave a vše si výrazně urychlit.
Postup
Do proměnné si uložíme vektor hodnot, který nám vhodně “pokryje” interval, na kterém chceme funkci vykreslit.
x=0:0.1:2*pix =
Columns 1 through 8:
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000
Columns 9 through 16:
0.8000 0.9000 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000
Columns 17 through 24:
1.6000 1.7000 1.8000 1.9000 2.0000 2.1000 2.2000 2.3000
Columns 25 through 32:
2.4000 2.5000 2.6000 2.7000 2.8000 2.9000 3.0000 3.1000
Columns 33 through 40:
3.2000 3.3000 3.4000 3.5000 3.6000 3.7000 3.8000 3.9000
Columns 41 through 48:
4.0000 4.1000 4.2000 4.3000 4.4000 4.5000 4.6000 4.7000
Columns 49 through 56:
4.8000 4.9000 5.0000 5.1000 5.2000 5.3000 5.4000 5.5000
Columns 57 through 63:
5.6000 5.7000 5.8000 5.9000 6.0000 6.1000 6.2000
Rozbor:
první hodnota (0) je počáteční bod intervalu
poslední hodnota () je konečný bod intervalu
prostřední hodnota je velmi důležitá, určuje s jak “velkým krokem” se bude pracovat - zvolili jsme hodnotu 0,1 Do proměnné se tedy nejprve uloží hodnota 0 a následně se budou ukládat čísla vždy o 0,1 větší než číslo předchozí (tj. ). Toto bude probíhat, dokud nebude překročena poslední hodnota. Jak vidíme, do vektoru se celkem uložilo 63 hodnot. Tímto jsme dosáhli pokrytí intervalu .
Tyto body následně použijeme ve funkci
plotjako první argument.Jako druhý argument použijeme samotnou funkci, kterou chceme vykreslit (Pozor: pokud v prvním kroku ukládáme hodnoty do proměnné , musíme v tomto kroku použít jako proměnnou)
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x))
Výsledkem je funkce na intervalu .
Zvolený postup lze aplikovat na libovolnou funkci (stačí nahradit druhý argument funkce plot požadovanou funkcí). Pokud bychom chtěli vykreslit funkcí , stačilo by zadat:
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,cos(x)/2+2)
Pokud bychom chtěli upravit interval, bude třeba nejprve upravit hodnoty v proměnné . Řekněme, že chceme předchozí funkci vykreslit na intervalu :
x=-2*pi:0.1:4*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,cos(x)/2+2)
Možná teď uvažujete nad tím, jestli je třeba vždy zvolit “délku kroku” pří vytváření vektoru zrovna 0,1. Není tomu tak, volba je zcela na Vás a je třeba zvolit rozumný kompomis. Když bude krok moc velký, může být výsledná funkce moc “hranatá”, naopak s moc malým krokem bude vektor obsahovat velké množství hodnot a výpočet grafu pak bude trvat delší dobu (všimněte si v kódu středníku při vytváření vektoru - ten potlačí výstup na obrazovku, takže se nám nevypíšou hodnoty vektoru , kterých je 189) být výpočet zbytečně náročný.
Co se stane, když zvolíme moc velký krok si ukážeme na funkci :
x=0:1:2*pi
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x))x =
0 1 2 3 4 5 6

Jak vidíme, při volbě kroku o délce 1 se funkce počítá pouze pro 7 bodů a je hdoně hrbatá. Pokud se Vám něco takového stane, je třeba upravit délku kroku na menší.
Hrajeme si se vzhledem¶
V této části si ukážeme, jak upravit vzhled grafu tak, aby nám vyhovoval. Pokud nebude řečeno jinak, budeme používat graf funkce . Začneme barvou grafu:
Změna barvy grafu¶
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x),'g')
Pokud chceme změnit barvu, je třeba zadat třetí parametr, kde do jednoduchých uvozovek vložíme písmeno, které určí barvu. V našem případě parametr 'g' změni barvu grafu na zelenou. Základní barvy jsou značeny následujícími barvami:
k - černá (blacK)
r - červená (Red)
g - zelená (Green)
b - modrá (Blue)
y - žlutá (Yellow)
m - magenta (Magenta)
c - azurová (Cyan)
w - bílá (White)
Další, co bychom mohli chtít změnit je typ grafu. Řekněme, že bychom chtěli použít tečkovaný graf místo čárového.
Změna typu grafu¶
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x),':')
Obdobně jako u změny barvy, je třeba zadat třetí parametr, kde do jednoduchých uvozovek vložíme příslušný symbol. V našem případě parametr ':' který změní typ grafu na tečkovaný. Základní typy jsou značeny následujícími symboly:
-'čárový graf (bude použit, pokud nezvolíme jiný typ)--čárkovaný graf:tečkovaný graf-.čerchovaný graf
Také se nám nemusí být, že body grafu jsou spojené.
Bodový graf¶
Opět je třeba zadat třetí parametr, kde do jednoduchých uvozovek vložíme příslušný symbol. V našem případě parametr 'o' který v grafu zobrazí pouze vypočítané body pomocí koleček. Základní typy jsou značeny následujícími symboly:
+“vodorovný” křížokolečko*hvězdička.tečkyxkřížeksčtverečekddiamant^trojúhelník směřující nahoruvtrojúhelník směřující dolů>trojúhelník směřující doprava<trojúhelník směřující dolevappentagramhhexagram
Navíc všechny výše uvedené parametry se dají kombinovat
Kombinace parametrů¶
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x),'ro:')
V grafu byl jako třetí parametr použit 'ro:'. Graf tedy vypadá takto:
r- graf má červenou barvuo- body grafu budou vyznačeny kolečkem:- zvolili jsme typ čáry, body tedy budou spojeny pomocí tečkované čáry
Popis grafu¶
Nyní již umíme graf funkce nejen vykreslit, ale umíme i nastavit jeho barvu, jeho typ apod. Nyní se podíváme, jak graf popsat:
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x))
xlabel('osa x')
ylabel('osa y')
title('Nazev grafu')
legend('nazev funkce')
V grafu jsme použili celkem čtyři nové příkazy, které nám umožnili funkci popsat:
xlabel('osa x')- popis osyylabel('osa y')- popis osytitle('Nazev grafu')- název grafulegend('nazev funkce')- legenda (pokud se v grafu vyskytuje více funkcí, názvy/popis se odděluje pomocí čárky)
Poslední věc, kterou si ukážeme je vykreslení více funkcí v jednom grafu.
Více funkcí v grafu¶
Nyní si ukážeme, jak vykreslít více funkcí v jednom grafu. Nejspíš Vás napadne použít jednoduše dvakrát po sobě funkci plot:
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x))
plot(x,cos(x))
Jak vidíme, toto náš problém nevyřešilo, vykreslila se pouze druhá funkce (ve skutečnosti Octave vykreslí první funkci, následně ji ale smaže a vykreslí druhou funkci).
Musíme tedy Octave říct, že již vykreslené funkce nemá mazat. K tomu slouží příkat hold on:
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x))
hold on
plot(x,cos(x))
Jak vidíme, nyní již Octave vykreslil obě funkce do jednoho grafu. Navíc pro druhou funkci automaticky zvolil jinou barvu (aniž bychom mu to řekli), aby bylo možné funkce odlišit. Takto je možné do grafu vykreslit tolik funkcí, kolik budeme chtít.
Poznámka: k příkazu hold on exituje i opačný příkaz hold off, který opět “zapne mazání starých funkcí”.
Změna rozsahu os grafu¶
Poslední příkaz, který si ukážeme je příkad axis, který nám umožní změnit rozsah os grafu:
x=0:0.1:2*pi;
#Tento řádek ingorujte, slouží pro potřebu generování webové stránky
set(gcf,'Visible','on')
plot(x,sin(x))
axis([0,2*pi,0,1])
Pomocí příkazu axis jsme změnili rozsah os pomocí čtyřprvkového vektoru tak, že na ose se pohybujeme na intervalu (první dva parametry funkce axis) a na ose se pohybujeme na intervalu (třetí a čtvrtý parametr funkce axis).