grafick stupy v octave/matlabu a gnuplotukfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab8.pdf ·...
TRANSCRIPT
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
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
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
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_1octave:7> xlabel("2{/Symbol q} (deg)")octave:8> ylabel("Intensita (cps)")octave:9> print('graf.eps','depsc2','landscape','FHelvetica:20');
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
Octave a MatlabOctave a Matlab
příkaz plot: plot(x,y,FMT,x2,y2,FMT2,...)
x,y – vektory zobrazovaných datFMT – 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
Příklad: Vykreslete grafy nějakých funkcíbody, linií, impulsových grafem, v logaritmickém měřítku
stejná syntaxe příkazu plot platí i propříkazy semilogy, semilogx a loglog
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
uložení grafu v Octaveulož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)
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
více grafů v jednom grafuvíce grafů v jednom grafupří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
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
více grafů v jednom grafu Matlabví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');
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
uložení grafu v Matlabu (stačí kliknout)uložení grafu v Matlabu (stačí kliknout)
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
3D grafy v Octave3D grafy v Octave
máme data uložená ve 3 sloupcích X,Y,Z a chceme zobrazit graf
f2db=[x' y' z'];[m,X,Y]=tab2mat(b,1,2,3);surf(X,Y,m);
f2db=[x' y' z'];[m,X,Y]=tab2mat(b,1,2,3);contour(X,Y,m);
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
surf(X,Y,m);contour(X,Y,m);
imagesc(X,Y,m);
3D grafy v Octave3D grafy v Octave
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
3D grafy v Octave a Matlabu3D grafy v Octave a Matlabu
zatím jsme uvažovali kreslení 3D grafů funkcí, popř. dat, které jsou ekvidistatní v x a ytoto však není v reálu často splněno (např. v rtg.difrakci, kdy měříme v ekvidistatníchintervalech úhlů, ale tzv. mapy reciprokého prostoru se vyjadřují pomocí složek vektorureciproké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);
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;
(viz help meshgrid, griddata)
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
grafy v polárních souřadnicíchgrafy 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');
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
a teď GnuPlota 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 xa 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)
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
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,50replot
pm3d
set pm3d at sreplotset palette defined ( 0 "blue", 3 "green", 6 "yellow", 10 "red" )replotset pm3d at bsreplot
Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabua GnuPlotua GnuPlotu
Úvod do programování v prostředích Octave, Scilab a Matlab
GnuPlotGnuPlot
set encoding – nastavení kódování (např. set encoding iso_8859_1)set xlabel – nastavení popisu xové 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