co byste měli umět po dnešní lekci: nakreslit xy graf s popisky os nakreslit graf s více závislostmi, pro každou z nich vybrat symbol/barvu linie nakreslit více grafů do jednoho vykreslit 3D graf v různých formátech ( normální, kontury, barevnou mapu) výsledný graf uložit do vhodného formátu (ps, png,...) vykreslit grafy pomocí programu GnuPlot
Octave octave:1> x=[0:0.05:8*pi]; octave:2> y=sin(x).*exp( x/5); octave:3> x2=[0:0.6:8*pi]; octave:4> y2=sin(x2).*exp( x2/5)+randn(size(x2))/30; octave:5> plot(x2,y2,'b+;moje data;',x,y,'r ;teorie;'); octave:6> gnuplot_set encoding iso_8859_1 octave:7> xlabel("2{/symbol q} (deg)") octave:8> ylabel("intensita (cps)") octave:9> print('graf.eps',' depsc2',' landscape',' FHelvetica:20');
Octave a Matlab příkaz plot: plot(x,y,fmt,x2,y2,fmt2,...) x,y vektory zobrazovaných dat FMT popis, jak se mají data zobrazit ' ' linie '. ' body '@' styl bodů ' @' styl čar ' ^ ' impulsový graf ' N ' schody ' N ' číslo barvy ' NM ' číslo barvy a stylu zobrazení ' C ' kód barvy ( k, r, g, b, m, c, w ) ;legenda; text legendy +,*,o,x styly bodů Matlab nabízí více možností stylů bodů a čar, viz help plot stejná syntaxe příkazu plot platí i pro příkazy semilogy, semilogx a loglog Příklad: Vykreslete grafy nějakých funkcí body, linií, impulsových grafem, v logaritmickém měřítku
uložení grafu v Octave (pozor na verze aneb čtení dokumentace se vyplatí) Od verze 2.1.73 se pro tisk používá příkaz print z důvodů kompatability s Matlabem. GnuPlotu lze předat potřebné parametry pomocí příkazů gnuplot_set a gnuplot_raw. Pro starší verze (zejména verze 2.1.57 a další do 2.1.72, které jsou k dispozici pro OS Windows a ve starších distribucích linuxu) je nutno použít funkci gset, která předává GnuPlotu potřebné parametry. print('graf.eps',' depsc2',' landscape',' FHelvetica:20'); zapíše obrázek do souboru graf.eps ve formátu eps2 (barevně), v orientaci na délku a pro popisky použije font Helvetica o velikosti 20 (fonty se udávají jen pro výstup do (E)PS, proi jiné formáty, např. png, se použije implicitní font; je však možné doinstalovat TrueType fonty) print('graf.png',' dpng',' landscape',' FArial:18'); Příklad: Uložte váš graf (viz minulý úkol) do postscriptu, png nebo jiného formátu (viz help print)
více grafů v jednom grafu příkaz subplot(n,m,index), kde N počet grafů v řádku matice M počet grafů ve sloupci matice Index který graf se bude kreslit x=[0:0.06:2*pi]; y=sin(x); subplot(2,2,1); plot(x,y,"@12;2,2,1;"); subplot(2,2,2); y2=cos(x); plot(x,y2,"k ;2,2,2;"); subplot(2,2,3); y3=cos(x)+sin(x); plot(x,y3,"m+;2,2,3;") subplot(2,2,4); y4=cos(x) sin(x); plot(x,y4,"c ;2,2,4;"); tisk pomocí příkazu print
více grafů v jednom grafu Matlab clear all; x=[0:0.06:2*pi]; y=sin(x); subplot(2,2,1); plot(x,y,'bd'); legend('2,2,1'); subplot(2,2,2); y2=cos(x); plot(x,y2,'k '); legend('2,2,2'); subplot(2,2,3); y3=cos(x)+sin(x); plot(x,y3,'m+') legend('2,2,3'); subplot(2,2,4); y4=cos(x) sin(x); plot(x,y4,'c '); legend('2,2,4');
uložení grafu v Matlabu (stačí kliknout)
3D grafy v Octave máme data uložená ve 3 sloupcích X,Y,Z a chceme zobrazit graf f2d b=[x' y' z']; [m,x,y]=tab2mat(b,1,2,3); surf(x,y,m); f2d b=[x' y' z']; [m,x,y]=tab2mat(b,1,2,3); contour(x,y,m);
imagesc(x,y,m); surf(x,y,m); contour(x,y,m); 3D grafy v Octave
3D grafy v Octave a Matlabu zatím jsme uvažovali kreslení 3D grafů funkcí, popř. dat, které jsou ekvidistatní v x a y toto však není v reálu často splněno (např. v rtg.difrakci, kdy měříme v ekvidistatních intervalech úhlů, ale tzv. mapy reciprokého prostoru se vyjadřují pomocí složek vektoru reciprokého prostoru q, které však po přepočtu z úhlů už ekvidistantní nejsou. funkce [gridx,gridy]=meshgrid(x,y); funkce [gridx,gridy]=griddata(x,y,z,gridx,gridy); (viz help meshgrid, griddata) function [m,qx,qz]=gridmymap(data,nx,ny) % funkce [m,qx,qz]=gridmymap(data,nx,ny) griduje % data ulozena v poli Nx3 data, Nx a Ny je pocet hodnot % podel x a y % funkce vraci matici m a vektory qx a qz qx=linspace(min(data(:,1)),max(data(:,1)),nx); qz=linspace(min(data(:,2)),max(data(:,2)),ny); [QX,QZ]=meshgrid(qx,qz); m=griddata(data(:,1),data(:,2),data(:,3),qx,qz); %hledani NaN n=isnan(m); m(n)=0.0;
grafy v polárních souřadnicích příkaz polar(uhel, r, FMT) t = 0:.01:2*pi; polar(t,sin(2*t).*cos(2*t),' r');
a teď GnuPlot 2d grafy: příkaz plot plot 'data.dat' u 1:2 title 'moje data' w p ps 2, 'data.dat' u 1:3 title 'co melo vyjit' w l použije 1 sloupec dat jako x a 2 sloupec jako y data vykreslí body (w p = with points) velikost symbolu 2 ps 2 = pointsize 2 data vykreslí čarou (w l = with line) with (w) lp = linespoints (body i čáry) impulses = impulsový graf logaritmické osy: set logscale x, set logscale y (unset)
3d grafy: příkaz splot splot 'data.dat' u 1:2:3 title 'moje data' splot sin(sqrt(x**2+y**2))/sqrt(x**2+y**2) set isosamples 50,50 replot pm3d set pm3d at s replot set palette defined ( 0 "blue", 3 "green", 6 "yellow", 10 "red" ) replot set pm3d at bs replot
GnuPlot set encoding nastavení kódování (např. set encoding iso_8859_1) set xlabel nastavení popisu x ové osy (set xlabel 'osa x') (totéž platí pro y(z)label ) set title nastavení titulku grafu (set title 'Muj Prvni Graf') set xrange [od:do] nastavení rozsahu osy x (stejné platí pro y(z)range); pokud je místo nějaké hodnoty uvedena *, nastaví se rozsah automaticky (set xrange [ 1:1], set xrange [*:10]) set terminal udává výstupní zařízení, tj. kam se bude vykreslovat/tisknout graf set term win, set term x11, set term postscript, set term pdf, set term jpg... set size nastavuje velikost obrázku; možno zadat set size ratio square (obrázek bude čtvercový), set size ratio 2 obrázek bude mít poměr š x v=1x2 více (včetně demonstračních souborů a ukázek) na www.gnuplot.info