Grafick stupy v Octave/Matlabu a GnuPlotukfes-16. standa/matlab/matlab8.pdf · PDF file...

Click here to load reader

  • date post

    03-Mar-2020
  • Category

    Documents

  • view

    2
  • download

    0

Embed Size (px)

Transcript of Grafick stupy v Octave/Matlabu a GnuPlotukfes-16. standa/matlab/matlab8.pdf · PDF file...

  •    

    Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabu a 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/Matlabu a 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_1 octave: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/Matlabu a GnuPlotua GnuPlotu

    Úvod do programování v prostředích Octave, Scilab a Matlab

  •    

    Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabu a 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 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

    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 pro příkazy semilogy, semilogx a loglog

  •    

    Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabu a 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/Matlabu a GnuPlotua GnuPlotu

    Úvod do programování v prostředích Octave, Scilab a Matlab

    více grafů v jednom grafuví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

  •    

    Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabu a 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/Matlabu a 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/Matlabu a 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

    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);

  •    

    Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabu a 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/Matlabu a 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 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);

    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/Matlabu a 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/Matlabu a 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 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)

  •    

    Grafické výstupy v Octave/MatlabuGrafické výstupy v Octave/Matlabu a 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