מבוא למחשב בשפת Matlab תרגול 10: גרפיקה כל הזכויות שמורות לטכניון מכון טכנולוגי לישראל
הפונקציה plot ניתן לצייר גרפים. x = [-0.1 4 3 2 5 6 7 8.5 9 10]; y = [0.6 2 3.3 4 8 19 4 6 5 10]; plot(x,y) 20 באמצעות Matlab דוגמה: 18 מטלאב מצייר את הנקודות במישור 16 14 12 10 8 6 4 2 0-2 0 2 4 6 8 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 2
הפונקציה plot ניתן לצייר גרפים. x = [-0.1 4 3 2 5 6 7 8.5 9 10]; y = [0.6 2 3.3 4 8 19 4 6 5 10]; plot(x,y) 16 באמצעות Matlab דוגמה: מטלאב מצייר את הנקודות במישור ואז מותח קו ביניהן 20 18 14 הפקודה plot יוצרת גרף דו מימדי x ו- y צריכים להיות בעלי אותם מימדים הגרף יופיע בחלון נפרד 12 10 8 6 4 2 0-2 0 2 4 6 8 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 3
אלמנטים בסיסיים בגרפים x = linspace(0,2*pi,101); y = sin(x); figure; plot(x,y); # - A figure handle Menu & Toolbar figure(n); יוצר את הגרף ה- n יש הרבה אופציות לעריכת הגרף מסרגל הכלים Plot Axes 4 Plot of a data series
דוגמה נוספת x = 1:0.1:10; y = sin(x); plot(x,y) 1 0.8 0.6 0.4 0.2 0-0.2-0.4-0.6-0.8-1 1 2 3 4 5 6 7 8 9 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 5
שליטה בתכונות הגרף ניתן לקבוע את צבע הגרף, צורת הנקודות וסוג הקו. למשל הפקודה plot(x,y, ro: ) תדפיס את הגרף הבא: 1 0.8 סוג הקו: מקווקוו 0.6 0.4 צורת הנקודות: עיגול 0.2 0 צבע הגרף: אדום -0.2-0.4-0.6-0.8-1 1 2 3 4 5 6 7 8 9 10 מה היה קורה אילו היינו משנים קצת וכותבים :?plot(x,y, ro ) מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 6
plot(y) y = [0.6 2 3.3 4 8 19 4 6 5 10]; plot(y) plot(1:length(y),y) 20 ניתן לכתוב: זה שקול ללכתוב: 18 16 14 12 10 8 6 4 2 0 1 2 3 4 5 6 7 8 9 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 7
מספר גרפים על תמונה אחת דרך א': מכניסים את כל הווקטורים באותה פקודה דוגמה: 'rx:') plot(x, y, 'go-', x, x, 10 8 6 4 ניתן לקבוע את הפורמט של כל גרף בנפרד 2 0-2 1 2 3 4 5 6 7 8 9 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 8
מספר גרפים על תמונה אחת a = [1 2 3; 2.5 4 1.2; 3 1.6 4]; plot(a) דרך ב': במקום ווקטור בונים מטריצה. כל עמודה משמשת לגרף אחר. לדוגמה, הגרף הכחול מתאים לעמודה הראשונה במטריצה: f(1)=1 f(2)=2.5 f(3)=3 4 3.5 3 הגרף הירוק מתאים לעמודה השנייה במטריצה: f(1)=2 f(2)=4 f(3)=1.6 2.5 2 1.5 1 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 תרגול 5 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 9
מספר גרפים על תמונה אחת דרך ג': באמצעות הפקודה.hold on hold גורם לכל גרף להופיע יחד עם הגרף הקודם. hold on מבטל את hold off hold on x=0:pi/100:4*pi; plot(x, sin(x), ro ) plot(x, cos(x), gx ) 1 0.8 0.6 0.4 0.2 0 ניתן לקבוע את הפורמט של כל גרף בנפרד -0.2-0.4-0.6-0.8-1 0 2 4 6 8 10 12 14 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 10
עיצוב ועריכה של גרפים. ניתן לשלוט בצבע הגרף בעזרת התווים ניתן לשלוט בסוג הקו באמצעות התווים: -. - -- : b, g, r, c, m, y, k, w v כמו כן, ניתן להוסיף סמן בנקודות )ריבוע, עיגול, כוכב וכד'(: - o - * - p - d - s הוספת טקסט לציר ה- x : הוספת טקסט לציר ה- y : הוספת מקרא:.xlabel(string).ylabel(string) legend(string1,string2,...) )מספר המחרוזות כמספר הגרפים(. הוספת שם לגרף:.title(string) ניתן לקבוע את תחום המספרים בכל ציר ע"י הפקודה הוא ווקטור שמכיל ארבעה מספרים: axis(v).xmin, xmax, ymin, ymax כאשר מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 11
Symbol Color Symbol Marker Symbol Line style b blue. point - solid g green o circle : : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star (none) no line y yellow s square k black d diamond v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 12
y עיצוב ועריכה של גרפים - דוגמה x=[1 2 3 4 5 6 7 8 9 10]; y=[7 4 3.3 2 8 19 4 6 5 10]; plot(x,y) xlabel('x') ylabel('y') legend('my graph') title('y as a function of x ) 20 18 16 y as a function of x my graph 14 12 10 8 6 4 2 1 2 3 4 5 6 7 8 9 10 x מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 13
דוגמה נוספת >> plot(x,y) 20 20 18 16 14 12 18 16 14 12 10 8 6 4 2 1 2 3 4 5 6 7 8 9 10 10 8 6 4 >> axis([0,10,0,20]) 2 0 0 1 2 3 4 5 6 7 8 9 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 14
תרגיל z כתבו פונקצייה המקבלת את x והקוסינוס של x ומחשבת את ו- y פונקציות הסינוס function draw_cos_sin(x) y = sin(x); z = cos(x); plot(x,y,'b-'); hold on; plot(x,z,'r-'); legend('sine', 'Cosine'); 15
תרגיל כתבו פונקצייה המקבלת את x ומייצרת את הגרף הבא: y1 sin( x) e x 10 8 6 4 Waves sin cos y2 cos( x) e x 10 2 0-2 -4-6 -20-15 -10-5 0 5 10 15 20 x = linspace(-6 * pi, 6 * pi); מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 16
פתרון Function draw_figures(x) y1 = sin(x).*exp(x/10); y2 = cos(x).*exp(-x/10); plot(x,y1,'b-',x,y2,'b--') legend('sin','cos') title('waves') מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 17
- מילוי פוליגון Fill figure; t =(1:2:15)'*pi/8; x = sin(t); y = cos(t); fill(x,y,'r'); axis square off; מה מצייר הקוד הבא? text(0,0,'stop','color', [1 1 1],... 'FontSize', 80,... 'FontWeight','bold',... ממלא את הפוליגון )מחבר התחלה לסוף ) 'HorizontalAlignment', 'center'); 18
תרגיל כתבו פונקצייה המקבלת את m -מספר צלעות הפוליגון ומייצרת פוליגונים עם מספר צלעות עולה מ- 3 ועד m ב- 4 מקומות סימטריים. לדוגמא, עבור 5=m יתקבל הגרף הבא: מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 19
פתרון שלב ראשון: פונקצייה המציירת פוליגון קלט: מרכז הפוליגון, רדיוס, ומספר הצלעות ציור הפוליגון: בעזרת הפונקציות sin ו- cos function plotpoly(x0,y0,r,n) t = linspace(0,2*pi,n+1); x = x0+r*cos(t); y = y0+r*sin(t); plot(x,y); end plotpoly(5,2,4,8) תרגול 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 20
פתרון )המשך( שלב שני: פונקצייה המציירת כמה פוליגונים קלט: מרכז הפוליגון, ומספר הצלעות המקסימלי כשמספר הצלעות יגדל, כך גם יגדל הרדיוס function plotpolys(x0,y0,m) for n=3:m plotpoly(x0,y0,n) hold on; end end plotpolys(2, 5, 6) תרגול 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 21
פתרון )המשך( שלב שלישי: פונקצייה המציירת פוליגונים ב- 4 מקומות קלט: מספר הצלעות המקסימלי function plot_many_poly(m) plotpolys(-m,-m,m); plotpolys(-m, m,m); plotpolys( m,-m,m); plotpolys( m, m,m); end plot_many_poly(10) תרגול 10 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 22
הפונקציה subplot פונקציה זו מאפשרת לנו לפצל את החלון למספר גרפים. בד"כ נקרא לפונקציה בכדי להודיע ל- MATLAB היכן ימוקם הגרף הבא בחלון, ואז נצייר את הגרף עצמו עם stem,plot וכד'. ניתן להסתכל על החלון החדש כמטריצה בו כל תא מכיל גרף. התחביר: num>) subplot(<row num>, <col num>, <plot row num col num מציין את מספר השורות בחלון. מציין את מספר העמודות בחלון. plot num באיזה תא במטריצה אנחנו עומדים להשתמש עכשיו, הספירה לפי שורות. מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 23
עבודה עם מספר חלונות שרטוט במקביל איננו מוגבלים רק לחלון שרטוט אחד בכל רגע נתון. נוכל להשתמש בפקודה figure בכדי לפתוח חלון חדש. בכדי שנוכל להבדיל בין החלונות, ניתן לתת מספר לכל figure חדש. למשל, figure(2) יפתח חלון שמספרו 2. מספר החלון כתוב בכותרת המסגרת ברירת המחדל היא 1. מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 24
דוגמא x = linspace(0,2*pi,101); y = sin(x); z = cos(x); A filled plot figure; area(x,z) hold on; plot(x,y, 'r-'); figure; subplot(2,1,1); plot(x,y,'b-'); subplot(2,1,2); plot(x, y, 'b-', x, z, 'r:'); באותם הצירים יכולים להיות מספר גרפים מסוגים שונים hold (switch on/off) close(n) closes figure n - subplot אומר לנו על איזה תת גרף אנחנו נמצאים האינדקסים הם משמאל לימין שורה אחר שורה עוד דרך לייצר מספר גרפים על אותם הצירים. 25
עוד דוגמא: בואו נגרום לגרף שלנו להראות יפה Basic plot: figure; plot(x,y); plot(x, y, 'ro:'); Lets dive deeper 26
Line properties plot(x,y, 'ro:',... 'LineWidth',3,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[.49 1.63],... 'MarkerSize',10); אלמנטים גרפיים מיוצגים ע"ע אובייקטים אפשר לשנות את התכונות של אובייקט ע"י העברה לפונקצייה: שם התכונה כמחרוזת ערך התכונה צבעים מיוצגים ע"י שילוב [R,G,B] RGB 27
Annotating the Graph plot(x,y, 'ro:',... 'LineWidth',3,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[.49 1.63],... 'MarkerSize',12); title('a Sine Plot',... 'FontSize', 16,... 'FontWeight', 'bold'); xlabel('angle (radians)'); ylabel('value'); legend('sine'); Axes labels תכונות של הטקסט 28 מקרא עבור מספר גרפים: legend) line1, line2 (;
הוספה של טקסט לגרף plot(x,y, 'ro:',... 'LineWidth',3,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[.49 1.63],... 'MarkerSize',12); title('a Sine Plot',... 'FontSize', 16,... 'FontWeight', 'bold'); xlabel('angle (radians)'); ylabel('value'); קואורדינטת Y legend('sine'); text(pi/6, sin(pi/6), ['sin(\pi/6) = ' num2str(sin(pi/6))], 'FontSize', 14); קואורדינטת X מחרוזת. בסגנון LaTex 29
שינוי גודל הצירים plot(x,y, 'ro:',... 'LineWidth',3,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[.49 1.63],... 'MarkerSize',12); title('a Sine Plot',... 'FontSize', 16,... 'FontWeight', 'bold'); xlabel('angle (radians)'); ylabel('value'); legend('sine'); text(pi/6, sin(pi/6), ['sin(\pi/6) = ' num2str(sin(pi/6))],'fontsize', 14); axis([0 pi -1 1 ]) box off Grid on; 30 אפשר גם להשתמש: xlim([0,pi]); ylim([-1,1]); Box Grid
Get/Set שינוי הצירים plot(x,y, 'ro:',... 'LineWidth',3,... = gca הצירים הנוכחיים 'MarkerEdgeColor','k',... 'MarkerFaceColor',[.49 1.63],... 'MarkerSize',12); = gcf הגרף הנוכחי title('a Sine Plot',... 'FontSize', 16,... לאובייקט ציר יש הרבה תכונות 'FontWeight', 'bold'); xlabel('angle (radians)'); ylabel('value'); legend('sine'); text(pi/6, sin(pi/6), ['sin(\pi/6) = ' num2str(sin(pi/6))],'fontsize', 14); axis([0 pi -1 1 ]) box off grid on; x_labels = char('0 degrees','90 degrees','180 degrees'); set(gca, 'XTick', [0, pi/2, pi]) set(gca, 'XTickLabel', x_labels) Property Value 31
לפני ואחרי... ניתן להשתמש בסרגל הכלים על מנת לערוך תמונות אפשר גם ליצור קובץ m מדוע ליצור קובץ m: תכנות מהיר יותר תיעוד שימוש חוזר בקוד 32
שמירת גרף פורמטים : fig, bmp, jpg, eps, tif, more פורמט.fig איך שומרים? Figure menu -> File -> save / save as, chose format saveas x = linspace(0,2*pi,41); y = sin(x); figure_h = figure; plot(x,y) שימוש בפונקציית saveas(figure_h, 'sine', 'jpg');% gcf 33
בואו נעבור על כמה גרפים דו-מימדיים 34
הפונקציה bar x = -2.9:0.2:2.9; y = exp(-x.*x); bar(x, y) הפונקציה bar מציירת גרף עמודות. לדוגמה, 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0-3 -2-1 0 1 2 3 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 35
הפונקציה hist הפונקציה hist מציירת היסטוגרמה. תחומים שווים. בציר ה- x ל- 10 מחלקת את האיברים ב- c hist(c) מוצגים התחומים, בציר ה- y מוצגים מספר האיברים בכל תחום. לדוגמה, c = randn(10000,1); hist(c) 3000 2500 הפונקצייה יכולה לקבל את מספר הבינים כפרמטר נוסף 2000 1500 1000 500 0-4 -3-2 -1 0 1 2 3 4 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 36
Number of students הפונקציה stem x = [1 2 3 4 5 6]; y = [32 40 54 51 61 67]; stem(x,y) מאפשרת לצייר גרף דוגמה: "סוכרייה על מקל".)lollypop( 70 60 Students in Matlab over the years 50 40 30 20 10 0 0 1 2 3 4 5 6 7 Years מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 37
- דוגמה subplot x = -2.9:0.2:2.9; y = exp(-x.*x); subplot(3,1,1); stem(x, y) 1 0.5 0-3 -2-1 0 1 2 3 subplot(3,1,2) bar(x, y) 1 0.5 subplot(3,1,3); plot(x, y) 0-3 -2-1 0 1 2 3 1 0.5 0-3 -2-1 0 1 2 3 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 38
תרגיל כתבו פונקצייה המקבלת את x ומייצרת את הגרף הבא: בחלק הראשון של החלון מצוייר גרף הפונקציה y = sin(x)/x )בכחול( והישר 0=y )באדום(. בחלק השני של החלון מצוייר גרף הפונקציה y = 2x 2 )בכחול(. function draw_two_graphs(x) y = 1 0.5 sinc function y = sin(x)/x y = 0 0 plot(x,y) % draw y = sin(x)/x plot([-10, 10], ) % draw y = 0-0.5-10 -8-6 -4-2 0 2 4 6 8 10 200 y = 2x 2 150 100 50 0-10 -8-6 -4-2 0 2 4 6 8 10 תרגול 12 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 39
פתרון function draw_two_graphs(x) y = sin(x)./x; subplot(2,1,1) hold on plot(x, y) plot([-10, 10], [0, 0], 'r') title('sinc function') legend('y = sin(x)/x', 'y = 0') subplot(2,1,2) stem(x, 2*x.^2) title('y = 2x^2') מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 40
pie ו- Errorbar figure; Like plot but with error bars errorbar(x,y,e); title('errorbar'); a = [ 10, 5, 20, 30] figure; subplot(2,1,1); pie(a, [0,0,0,1]); legend('a','b','c','d') Explode logical array subplot(2,1,2); pie3(a, [0,0,0,1]); legend('a','b','c','d'); 41
עוד סוגים של גרפים צירים בסקאלה לוגריתמית semilogx / semilogy... - loglog 42
קצת על תמונות 10 21 10 21 73 21 18 21 10 4 8 21 3 21 10 45 8 21 2 21 מטריצות יכולות להיות מיוצגות כתמונות Color map טבלה שמייצגת צבעים שונים colormap imagesc colorbar מציג כתמונה ומתאים ערכים ל- colormap imagesc(x);colorbar; colormap('default') colormap( gray'); imagesc(x); 43
עוד דוגמאות Jet flow analysis Bone image Microarray illustration load flujet; image(x); colormap('jet'); load spine; image(x); colormap bone; 44
גרפים תלת מימדיים למטלב יש הרבה סוגים של גרפים תלת מימדיים z רובם משתמשים בצבע כעוד מימד או כדי להדגיש את מימד גרפים תלת מימדיים: Plot3 Pie3 Mesh / meshc / meshz Surf / waterfall / surfc Contour Quiver Fill3 Stem3 Slice Scatter3 45
גרפים תלת מימדיים - plot3 z 1 y 1 לחלק מהגרפים יש גרסא לתלת מימד. x 1 רוב מה שלמדנו לדו מימד מתאים גם לתלת מימד t = 0:pi/50:10*pi; plot3(sin(t),cos(t),t) grid on axis square 46
הפונקציות ezplot ו- ezsurf הפונקציה ezplot מאפשרת לצייר בקלות גרפים דו-מימדיים. תחום ה- x הוא [2Π,2Π-] פרמטר הקלט של הפונקציה הוא מחרוזת המתארת את הפונקציה 2 x אותה רוצים לצייר 2 80 70 60 50 40 30 לדוגמה: ezplot('2*x^2') באופן דומה, הפונקציה ezsurf מאפשרת לצייר גרפים תלת מימדיים בקלות. 20 sin(x 2 +y 2 )/(x 2 +y 2 ) 10 0 1-6 -4-2 0 2 4 6 x 0.5 ezsurf('sin(x^2+y^2)/(x^2+y^2)') -0.5 5 5 0 0-5 -5 y x תרגול 12 מבוא למחשב בשפת מטלאב. כל הזכויות שמורות 47 0
גרפים תלת מימדיים xx = -3:0.1:3; yy = -3:0.1:3; [X, Y] = meshgrid(xx,yy); Z = (X+1).^2 - Y; surf(x,y,z); Grid example: >> aa = [1, 2] aa = 1 2 >> bb = [3, 4, 5] bb = 3 4 5 >> [A, B]=meshgrid(aa,bb) A = 1 2 B = 3 3 1 2 4 4 48 נניח ואנחנו רוצים ליצור את הגרף: f ( x, y) ( x 1)^2 בתחום: x=[-3,3],y=[-3,3] 4 צעדים: שימו 5 לב כי 5 הצבע מתאים 2 למימד של 1 z הגדר את התחום של )xx( x ושל y )yy( השתמש ב- meshgrid כדי ליצור את הצירים. חשב את ערך הפונקצייה )z( בעזרת x ו- y השתמש ב- surf(x, Y, Z) / mesh(x, Y, Z) כדי לצייר את הגרף y.1.2.3.4
עוד דוגמאות xx = -2:.2:2; yy = -2:.2:3; [X,Y] = meshgrid(xx,yy) Z = X.*exp(-X.^2-Y.^2); Figure; C = -X; surf(x,y,z,c);colorbar; title('surfc, C = -X'); צבע כמימד רביעי 49
סרטים במטלב קל מאוד! שלוש פקודות: M(1) = getframe movie(m) 50
Twin Peaks xx = -2:.2:2; yy = -2:.2:3; [X,Y] = meshgrid(xx,yy); Z = X.*exp(-X.^2-Y.^2); clear F; j = 1; surf(x,y, sin(2*pi*j/20)*z); zlim([-0.4218 0.4218]); F(j) = getframe; j = 20; surf(x,y, sin(2*pi*j/20)*z); zlim([-0.4218 0.4218]); F(j) = getframe; Try it yourself! (remember ctrl-c to stop the movie) Play the movie ten times movie(f,10); % create an avi movie movie2avi(repmat(f,1,5), 'twin_peaks.avi', 'compression, 'Indeo3' ); 51
למטלב יש הרבה סוגים של גרפים... גרפים דו מימדיים: גרפים תלת מימדיים: Plot3 Pie3 Mesh / meshc / meshz Surf / waterfall / surfc Contour Quiver Fill3 Stem3 Slice Scatter3 Plot plotyy Semilogx / semilogy Loglog Area Fill Pie bar/ barh Hist / histc Stem Errorbar Polar / rose Fplot / ezplot Scatter Image / imagesc /pcolor 52