Wykresy i obiekty graficzne w Matlabie Dr inż. Z. Rudnicki Wykresy dwuwymiarowe (2D) - funkcja plot plot(x,y)- Dla danych wektorów x, y rysuje wykres liniowy plot(y) - Wykres liniowy wartości y, a na osi x są ich numery plot(x1,y1, x2,y2,...) - Kilka wykresów z domyślnymi typami linii plot(x1,y1,s1, x2,y2,s2,...) - Kilka wykresów, przy czym: s1, s2 to łańcuchy znaków określające rodzaj linii, kolor linii i znacznik punktów, np.: --r+ 2 1
Opisywanie wykresu grid on - włącza siatkę wykresu (grid off wyłącza) title('tytuł wykresu') - tytuł wykresu xlabel('opis_x') - opis osi x ylabel('opis_y') - opis osi y text(x, y, 'napis') - dodaje napis w ukł. współrzędnych legend(s1, s2, s3,...) - legenda: s1, s2,..- opisy wykresów Można także wpisywać wzory jak w programie Tex np.: title('{\itae}^{-\alpha\itt}sin\beta{\itt} \alpha<<\beta') wyświetli: 3 Okna graficzne figure Wyniki działań funkcji graficznych będą widoczne w bieżącym oknie graficznym (zwanym figure). Jeśli nie było żadnego okna to automatycznie utworzy się okno po wywołaniu plot lub innej funkcji graficznej Nowy wykres zastąpi poprzedni, ale jeśli wykonamy: hold on to zostanie dodany do poprzedniego wykresu. Jeśli chcemy aby kolejne wykresy powstawały w nowych oknach graficznych to musimy tworzyć takie okna komendą figure na przykład: figure; plot(x,f1(x)); figure; plot(x,f2(x)); 4 2
Dzielenie okna graficznego - subplot subplot(lw, Lk, nr) - Powoduje podzielenie okna graficznego na kilka okienek podrzędnych (tablicę okien), przy czym: Lw = liczba wierszy, Lk = liczba kolumn, nr = numer uaktywnianego okienka np.: A=imread('NIEBO.BMP'); subplot(1,2,1); imshow(a); subplot(1,2,2); surf(double(a)); colormap 'gray' 5 Interaktywne formatowanie wykresu 6 3
Funkcje pomocnicze hold on - pozwala dodawać kolejne wykresy w tym samym układzie axis([xmin xmax ymin ymax]) - ustawia zakresy dla osi x oraz y, axis equal - jednakowe skale na obu osiach, 7 Przykład użycia funkcji plot x=0 : 0.2 : 2*pi; plot(x,sin(x)); grid on title('przykład wykresu:'); xlabel('x'); ylabel('sin(x), cos(x)'); % ------ % nie wykorzystano plot do drugiego wykresu % ale można to zrobić teraz: hold on % w tym samym układzie P=plot(x,cos(x), ':m'); set(p,'linewidth',3); legend('sinus','cosinus'); 8 4
Wykresy słupkowe bar(x, y) - Wykres słupkowy y(x), np.: >> x=0:0.1:pi; >> bar(x,sin(x)) bar(x, y, s) - Wykres słupkowy y(x), przy czym s - to stosunek szerokości słupka do odstępu między słupkami. bar(y) - Wykres słupkowy wartości y a na osi x są ich numery 9 Wykresy wyrażeń podanych w postaci tekstowej - ezplot ezplot(' fun(x,y) ') - Wykres fun(x,y)=0 w zakresie [-2 pi, 2 pi], ezplot(' f1(p) ', ' f2(p) ') - Wykres parametryczny dla p: [-2 pi, 2 pi] np.: >> ezplot('x^2+y^2-16'); figure; ezplot( sin(p)', cos(3*p)') ezplot('wyrażenie',[xmin, xmax]) - Wykres wyrażenia z jedną zmienną w podanym zakresie. 10 5
Wykresy biegunowe i logarytmiczne ezpolar('wyrażenie') - Wykres biegunowy w zakresie 0 do 2π, np.: ezpolar('1+cos(t)') polar(kąt, promień, typ_linii) - Wykres biegunowy loglog(x, y, s) - Wykres o skalach logarytmicznych na obu osiach semilogx(x, y, s) - Wykres o skali logarytm. na osi x, s = typ linii semilogy(x, y, s) - Wykres o skali logarytmicznej na osi x 11 Wykres 3D z użyciem pętli FOR % Paraboloida clear; clc Xp=-9; Xk=9; N=19 Dx=(Xk-Xp)/N; Yp=Xp; Yk=Xk; Dy=Dx; y=yp for w=1:n x=xp for k=1:n Z(w,k)=100-x^2-y^2; x=x+dx end y=y+dy end subplot(1,2,1); surf(z); title('pow...') subplot(1,2,2); contourf(z); title('war..') 12 6
Wykresy 3D bez użycia pętli FOR Rysowanie wykresów trójwymiarowych przebiega dwuetapowo: 1) przygotowanie siatki par współrzędnych (x,y) dla funkcji z=f(x,y) przy pomocy funkcji meshgrid 2) użycie jednej z wielu funkcji dla wykresów trójwymiarowych Funkcji meshgrid podajemy jako argumenty ciągi (wektory) wartości x oraz y a w wyniku uzyskujemy dwie macierze zawierające łącznie wszystkie pary współrzędnych dla których mają być wyznaczane wartości funkcji zmiennych x,y. Na przykład: >> [x y] = meshgrid(0:0.1:0.3, 1:3) x = 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000 y = 1 1 1 1 2 2 2 2 3 3 3 3 Tak więc funkcja wyliczana będzie dla (0, 1); (0.1, 1); (0.2, 1),... i tak dalej. 13 Wykresy 3D bez użycia pętli FOR c.d. % najpierw siatka punktów (x,y) dla wykresu 3D: [x,y]=meshgrid(-3*pi : 0.5 : 3*pi, -3*pi : 0.5 : 3*pi); % nastepnie definiujemy funkcje z(x,y): z = 600 x.* y + 50 * sin(x) + 50 * sin(y); % subplot wybiera ćwiartkę okna graficznego: % 1) wykres siatkowy: subplot(2,2,1); mesh(x,y,z); % 2) wykres powierzchniowy: subplot(2,2,2); surf(x,y,z); % 3) wykres warstwicowy: subplot(2,2,3); contourf(x,y,z); % 4) wykres siatkowy z warstwicami: subplot(2,2,4); meshc(x,y,z); 14 7
Jednak najprostszy sposób uzyskania wykresu 3D to zastosowanie funkcji ezmeshc('f(x,y)') f(x,y) podajemy jako tekst na przykład: ezmeshc('x*exp(-x^2 - y^2)') 15 Grafika uchwytów Wykresy i obiekty graficzne w Matlabie tworzą strukturę hierarchiczną nazywaną GRAFIKĄ UCHWYTÓW - Handle Graphics. Znajomość jej podstaw jest konieczna przy modyfikowaniu wykresów w Matlabie oraz budowanie programów z interfejsem graficznym. 16 8
Obiekty graficzne figure - okno graficzne uicontrol - element dialogowy axes - układ osi uimenu - menu użytkownika image - obraz line - linia (m.in. utworzona przez plot) patch - wielokąt surface - powierzchnia text - tekst light - źródło światła 17 Okno graficzne FIGURE i uchwyty Wszelkie obiekty graficzne powstają w oknach graficznych nazywanych FIGURE. Okien takich może być wiele. Przy tworzeniu zarówno okna jak i każdego obiektu powstaje jego unikalny identyfikator zwany uchwytem (handle). Jest to wielocyfrowy numer, który należy zapamiętać w zmiennej jeśli chcemy się nim posługiwać np.: x=0:0.1:2*pi; F1=figure; p1=plot(x,sin(x)); F2=figure; p2=ezplot('cos(x)'); % F1, F2, p1, p2 - to uchwyty set(p1,'linewidth',3); % - ustawia grubość pierwszego wykresu 18 9
Określanie wartości cech obiektów Tworzone obiekty mają swoje cechy posiadające domyślne wartości ale użytkownik może je sam ustawiać na dwa sposoby: 1) przy tworzeniu obiektu poleceniem o ogólnej budowie: uchwyt = obiekt( Naz_Cechy1', Wartość1, Naz_Cechy2', Wartość2,...) na przykład: F1=figure('Position',[5 40 790 300]) 2) poleceniem set przy wykorzystaniu uchwytu zdefiniowanego przy tworzeniu : set(uchwyt, Naz_Cechy1', Wartość1, Naz_Cechy2', Wartość2,...) na przykład: set(f1, 'Color', [0.5 0.5 0.9]) 19 Wybrane cechy okna figure Okno FIGURE - jak i pozostałe obiekty - ma zbyt dużo cech aby je zapamiętać, ale trzeba znać przynajmniej niektóre jak: Name - nazwa, pokazująca się w pasku tytułowym formatki (warto ją zmienić na odpowiednią dla zawartości okna), Position - [Xp, Yp, Dx, Dy] - położenie lewego dolnego rogu Xp, Yp, oraz rozmiary Dx,Dy, domyślnie w pikselach ale można zadać inne jednostki zmieniając cechę Units; cecha Units może mieć jedną z wartości: pixels normalized inches centimeters points characters. Domyślnie: 'pixels'. Jednostki określają położenie względem lewego dolnego rogu okna. W jednostkach 'normalized' - lewy dolny róg okna ma współrzędne (0,0) a prawy górny (1,1) Color - kolor tła o składowych [red green blue] określany trzema liczbami z zakresu 0 do 1, MenuBar - który jesli ma wartość 'figure' jest menu standardowym, a gdy 'none' to brak menu. 20 10
Własności obiektów i rola uchwytów Gdy nie posługujemy się uchwytem to operacje dotyczą zawsze "aktywnego" (bieżącego) elementu graficznego czyli tego który był przed chwilą utworzony albo ostatnio kliknięty. Na przykład komendy: grid on, ylabel( sin(x) ) - włączą siatkę i utworzą opis osi Y na ostatnio utworzonym wykresie. Jeśli chcemy uaktywnić wcześniej utworzone okno (np. wykresu) to albo trzeba zrobić to przez kliknięcie myszką, albo - jeśli zapamiętano uchwyt do tego okna w zmiennej np. F1 - to można użyć tej zmiennej: figure(f1) 21 11