Hàm Plot - Vẽ các điểm và đường trong mặt phẳng (2D): Phần lớn các câu lệnh để vẽ đồ thị trong mặt phẳng đều là lệnh plot. Lệnh plot vẽ đồ thị của một mảng dữ liệu trong một hệ trục thích hợp và nối các điểm bằng đường thẳng.
Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Chương ÐỒ HỌA VỚI MATLAB 4.1 Ðiểm đường 4.1.1 Hàm Plot - Vẽ điểm đường mặt phẳng (2D) Phần lớn câu lệnh để vẽ đồ thị mặt phẳng lệnh plot Lệnh plot vẽ đồ thị mảng liệu hệ trục thích hợp nối điểm đường thẳng Ví dụ: >>x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y) Lệnh plot mở cửa sổ đồ họa gọi cửa sổ figure: 0.8 0.6 0.4 0.2 -0.2 -0.4 -0.6 -0.8 -1 Trong cửa sổ tạo độ chia phù hợp với liệu, vẽ đồ thị qua điểm, đồ thị tạo thành việc nối điểm đường nét liền Có thể vẽ nhiều đồ thị hình vẽ cách đưa thêm vào plot cặp đối số, plot tự động vẽ đồ thị thứ hai màu khác hình Nhiều đường cong vẽ lúc cung cấp đủ cặp đối số cho lệnh plot 54 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Ví dụ: Ta sử dụng hệ trục ví dụ để vẽ thêm đồ thị cosx >>z=cos(x); 0.8 0.6 0.4 0.2 -0.2 -0.4 -0.6 -0.8 -1 Nếu ta thay đổi trật tự đối số đồ thị xoay góc 90o >> plot(y,x,z,x) -1 -0.8 -0.6 -0.4 -0.2 0.2 0.4 0.6 0.8 4.1.4 Kiểu đường, đánh dấu màu sắc MATLAB mặc định đường vẽ đường liền, không đánh dấu, màu xanh da trời Ta thay đổi kiểu đường vẽ đánh dấu lên đồ thị cách đưa vào đối số thứ ba Các đối số tùy chọn xâu kí tự, chứa nhiều theo bảng Nếu màu, dấu kiểu đường tất chứa xâu, kiểu màu chung cho dấu kiểu nét vẽ Ðể khai báo màu khác cho dấu, ta phải vẽ liệu với kiểu khai báo chuỗi khác 55 Chương 4:Ðồ họa với MATLAB Biểu tượng Biên soạn: Nguyễn Thị Hồng Thúy Màu Biểu tượng Ðánh dấu Biểu tượng Kiểu nét vẽ b xanh da trời chấm - nét liền g xanh o vòng tròn : nét chấm r đỏ x dấu x - nét gạch - chấm c xanh da trời nhạt + dấu + nét đứt m đỏ tím * dấu hoa thị y vàng s hình vng k đen d hình thoi w trắng ∧ tam giác hướng xuống ∨ tam giác hướng lên < tam giác hướng phải > tam giác hướng trái p năm cánh h sáu cánh Ví dụ:>>plot(x,y,'m*',x,y,'b ') 0.8 0.6 0.4 0.2 -0.2 -0.4 -0.6 -0.8 -1 Ðộ rộng đường vẽ (lines) xác định kèm với mô tả Linewidth lệnh plot Ðộ rộng đường vẽ mặc định 0.5 point ≈ 1/72 inch 56 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Chiều cao dấu (marker) xác định kèm với mô tả Markersize lệnh plot Chiều cao dấu mặc định point Ví dụ: >>plot(x,y,'p-','linewidth',4,'markersize',6) 0.8 0.6 0.4 0.2 -0.2 -0.4 -0.6 -0.8 -1 Ngoài ra, để xem thứ tự màu MATLAB, ta gõ lệnh: >> get(gca,'colororder') ans = 0 1.0000 0.5000 1.0000 0 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.2500 0.2500 0.2500 Theo thứ tự thì: 0 : màu xanh da trời (‘b’) 0.5 : màu xanh (‘g’) 0 : màu đỏ (‘r’) 0.75 0.75 : màu xanh da trời nhạt (‘c’) 0.75 0.75 : màu hồng nhạt (‘m’) 0.75 0.75 : màu vàng (‘y’) 0.25 0.25 0.25 : màu xám Ngoài màu trên, ta sử dụng thêm màu màu đen màu trắng 0 : màu đen (‘k’) 1 : màu trắng (‘w’) Thay đổi giá trị số mã màu ta có nhiều màu khác 57 Chương 4:Ðồ họa với MATLAB Ví dụ: 0.4 0.5 0.5 Biên soạn: Nguyễn Thị Hồng Thúy : 0.5 : màu đỏ đậm màu xám vừa phải 4.1.3 Ðồ thị lưới, hộp chứa trục, nhãn lời giải Lệnh grid on thêm đường lưới vào đồ thị Lệnh grid off xóa bỏ nét Ta đưa tên trục x, y tên đồ thị vào hình vẽ nhờ lệnh xlabel ylabel Lệnh title thêm vào đồ thị tiêu đề đỉnh Dòng ghi đưa vào đồ thị nhờ hàm legend Trong legend màu kiểu loại đường phù hợp với đường đồ thị Ví dụ: >> x=linspace(0,2*pi,30); >> y=sin(x); >> z=cos(x); plot(x,y,'mx-',x,z,'bp ') >> grid on >> xlabel('x') >> ylabel('y') >> title('do thi ham sin va cos') >> legend ('y = sinx','z = cosx') thi ham sin va cos 0.8 0.6 y = sinx z = cosx 0.4 y 0.2 -0.2 -0.4 -0.6 -0.8 -1 x 4.1.3 Thao tác với đồ thị Ta thêm nét vẽ vào đồ thị có sẵn cách dùng lệnh hold Khi dùng lệnh hold on, MATLAB không bỏ hệ trục tồn lệnh plot thực hiện, thay vào đó, thêm đường cong vào hệ trục Tuy nhiên, liệu không phù hợp hệ trục tọa độ cũ, trục chia lại Dùng lệnh hold off bỏ cửa sổ figure thay vào đồ thị Lệnh hold khơng có đối số bật tắt chức chế độ thiết lập hold trước 58 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Ví dụ: >> x=linspace(0,2*pi,30); >> y=sin(x); >> z=cos(x); >>plot(x,y) >> plot(x,y) 0.8 0.6 0.4 0.2 -0.2 -0.4 -0.6 -0.8 -1 7 Bây giữ nguyên đồ thị thêm vào đường cos: >> hold on >> plot(x,z,'m') 0.8 0.6 0.4 0.2 -0.2 -0.4 -0.6 -0.8 -1 Mặt khác, cửa sổ figure chứa nhiều hệ trục Lệnh subplot(m,n,p) chia cửa sổ thành ma trận m x n khoảng để vẽ đồ thị, chọn p cửa sổ hoạt động Các đồ thị thành phần đánh số từ trái qua phải, từ xuống dưới, sau đến hàng thứ hai… 59 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Ví dụ: >> subplot(2,2,1) >> plot(x,y) >> subplot(2,2,2) >> plot(y,x) >> subplot(2,2,3) >> plot(x,z) >> subplot(2,2,4) >> plot(z,x) 0.5 -0.5 -1 -1 8 0.5 -0.5 -1 -1 -0.5 0.5 -0.5 0.5 4.1.5 Hàm plot3 - Vẽ điểm đường không gian Hàm plot3 cho phép vẽ điểm đường khơng gian Ngồi việc có thêm trục z, cách sử dụng hàm giống cách sử dụng hàm plot Ví dụ: >> t=linspace(0,10*pi); >> subplot(1,2,1) helix >> plot3(sin(t),cos(t),t) helix 40 >> xlabel('sint') 30 >> ylabel('cost') 40 >> title('helix') 20 30 >> subplot(1,2,2) 10 >> plot3(sin(t),cos(t),t) 20 >> view([10,35]) 0.5 10 >> xlabel('sint') >> ylabel('cost') -0.5 -1 cost >> title('helix') cost -1 -1 -1 sint sint Trong tập hợp lệnh trên, gặp lệnh: 60 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy View([α,β]): α góc phương vị tính độ ngược chiều kim đồng hồ từ phía âm trục y Giá trị mặc định α -37.5o β góc nhìn tính độ xuống mặt phẳng x, y Giá trị mặc định β 30o Khi thay đổi giá trị α β nhìn hình vẽ góc độ khác Với tập hợp lệnh trên, cho giá trị α β 0o 90o ta thấy rõ hàm vẽ 2D trường hợp đặc biệt hàm vẽ 3D 4.1.6 Các hàm vẽ loglog, semilogx semilogy vẽ đường mặt phẳng - loglog: tương tự plot thang chia logarithm cho hai trục - semilogx: tương tự plot thang chia trục x logarithm thang chia trục y tuyến tính - semilogy: tương tự plot thang chia trục y logarithm thang chia trục x tuyến tính Ví dụ: >> x=[2:4:98]; >> y=100*x; >> subplot(1,2,1) >> plot(x,y,'.') >> title('plot(x,y)') >> xlabel('x tuyen tinh') >> ylabel('y tuyen tinh') >> grid on >> subplot(1,2,2) >> loglog(x,y,'.') >> title('loglog(x,y)') >> xlabel('x log') >> ylabel('y log') >> grid on plot(x,y) loglog(x,y) 10000 10 9000 8000 6000 y log y tuyen tinh 7000 5000 10 4000 3000 2000 1000 50 x tuyen tinh 10 10 100 semilogx(x,y) 10 x log semilogy(x,y) 10000 10 10 9000 8000 7000 6000 y log y tuyen tinh >> x=[2:4:98]; >> y=100*x; >> subplot(1,2,1) >>semilogx(x,y,'.') >>title('semilogx(x,y)') >>xlabel('x log') >>ylabel('y tuyen tinh') >>grid on 5000 10 4000 3000 2000 1000 0 10 10 x log 61 10 10 50 x tuyen tinh 100 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy >> subplot(1,2,2) >>semilogy(x,y,'.') >>title('semilogy(x,y)') >>xlabel('x tuyen tinh') >>ylabel('y log') >>grid on MATLAB khơng có hàm vẽ tương ứng với loglog, semilogx, semilogy khơng gian Vì vậy, muốn vẽ với hệ tọa độ logarithm không gian 3D, ta phải sử dụng hàm plot3 Chế độ tuyến tính ln mặc định Ðể thay đổi tỷ lệ trục sang tỷ lệ logarithm, ta dùng lệnh: Ve 3D voi truc z logarith Ve 3D voi truc z tuyen tinh 10 0.8 z log 0.6 z set(gca,’Xscale’,’log’) Ví dụ: >> t=[0.01:0.005:0.99]; >> x=cos(20*pi*t); >> y=sin(20*pi*t); >> z=t; >> subplot(1,2,1) >>plot3(x,y,z) >>set(gca,'Zscale','linear') >>title('Ve 3D voi truc z tuyen tinh') >>xlabel('x') >>ylabel('y') >>zlabel('z') >> grid on >>subplot(1,2,2) >>plot3(x,y,z) >>set(gca,'Zscale','log') >>title('Ve 3D voi truc z logarith') >>xlabel('x') >>ylabel('y') >>zlabel('z log') >> grid on 0.4 -1 10 0.2 -2 10 1 y 0 -1 -1 x y -1 -1 x 4.1.7 Ðồ thị bánh (pie) đồ thị cột (bar) 4.1.7.1 Ðồ thị bánh Ðể vẽ đồ thị bánh mặt phẳng ta dùng hàm pie, cịn muốn vẽ khơng gian, ta dùng hàm pie3 Về mặt cú pháp hai hàm pie pie3 giống Cú pháp có dạng: pie(V) 62 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Trong V vectơ chứa phần tử thể đồ thị bánh Nếu tổng phần tử vectơ nhỏ đồ thị bánh thể phần tử thành phần phần trăm Nếu tổng phần tử lớn 1, phần tử chia cho tổng để xác định phần chia đồ thị bánh ứng với phần tử Thứ tự phân chia đồ thị bánh theo thứ tự phần tử mô tả vectơ Ðường chia đường nối tâm điểm cao đường tròn, đường phân chia theo thứ tự ngược chiều kim đồng hồ Muốn tách phần chia khỏi đồ thị ta thêm vào hàm pie vectơ có kích thước với vectơ mơ tả Phần tử vectơ tương ứng với phần cần tách khỏi đồ thị ta cho giá trị khác 0, phần tử tương ứng với phần không tách ta cho giá trị Các màu phần đồ thị bánh MATLAB lựa chọn không trùng dễ phân biệt Ví dụ: Trong sản phẩm hồn thiện có chi tiết phân xưởng A, 12 chi tiết phân xưởng B, 15 chi tiết phân xưởng C 20 chi tiết phân xưởng D Ta thể số phần trăm chi tiết phân xưởng sản phẩm hồn thiện đồ thị bánh hàm pie sau: >> subplot(2,1,1) >> pie([5 12 15 20]) >> subplot(2,1,2) >> pie([5 12 15 20],[0 0 1]) >> pie([5 12 15 20],{'xuong A','xuong B','xuong C','xuong D'}) 10% 10% 38% 23% 29% 29% xuong A xuong D xuong B 38% 23% xuong C 63 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy 4.1.7.4 Đồ thị cột (bar) Hàm bar bar3 cho phép vẽ đồ thị mặt phẳng không gian Hàm barh hàm barh3 cho phép vẽ đồ thị cột nằm ngang mặt phẳng không gian bar(Vx, Vy, kích thước) Cú pháp: Trong Vx Vy vectơ có kích thước, giá trị độ cao cột Vy tương ứng với giá trị trục ngang Vx, điều ý quan trọng giá trị Vx phải đơn điệu tăng giảm Tham số kích thước xác định bề rộng cột Ví dụ: Vẽ đồ thị cột với số liệu: X Y 7.5 5.2 >> bar([2 4],[7.5 5.2 3],0.4) 2 Nếu ta không đưa vào giá trị X, nghĩa hàm bar vừa sử dụng ta bỏ [2 4], MATLAB mặc định giá trị X [1 3] Trong trường hợp Vy ma trận số nhóm cột kích thước vectơ Vx 64 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Ví dụ: thể đồ thị cột với số liệu sau: X Y 7.5 5.2 >> bar([1 3],[7.5 4;5.2 5],0.4) 4.4 Vẽ mặt 4.4.1 Vẽ mặt từ ma trận lệnh mesh, meshz, meshc, waterfall MATLAB định nghĩa bề mặt lưới điểm theo hướng trục z đường kẻ hình vng mặt phẳng x - y Nó tạo lên mẫu đồ thị cách ghép điểm gần kề với đường thẳng Kết trơng mạng lưới đánh cá với mắc lưới điểm liệu Đồ thị lưới thường sử dụng để quan sát ma trận lớn vẽ hàm có hai biến Bước đưa đồ thị lưới hàm hai biến z = f(x,y), tương ứng với ma trận X Y chứa hàng cột lặp lặp lại, MATLAB cung cấp hàm meshgrid cho mục đích này: X,Y] = meshgrid (x,y): tạo ma trận X, mà hàng vetơ x, ma trận Y có cột vectơ y Cặp ma trận sau sử dụng để ước lượng hàm hai biến sử dụng đặc tính tốn học mảng MATLAB 65 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Để vẽ bề mặt ta sử dụng hàm: mesh (X,Y,Z): nối điểm với lưới chữ nhật meshc (X,Y,Z): vẽ đường contour bên đồ thị meshz (X,Y,Z): vẽ đường thẳng đứng viền quanh đồ thị waterfall X,Y,Z): vẽ mặt với hiệu ứng thác đổ Ví dụ: Vẽ mặt xác định phương trình: z ( x, y ) = xe − x >> x=-2:0.5:2; >> y=-2:1:2; >> [X,Y]=meshgrid(x,y) X= Columns through -4.0000 -1.5000 -1.0000 -0.5000 -4.0000 -1.5000 -1.0000 -0.5000 -4.0000 -1.5000 -1.0000 -0.5000 -4.0000 -1.5000 -1.0000 -0.5000 -4.0000 -1.5000 -1.0000 -0.5000 Columns through 1.0000 1.5000 4.0000 1.0000 1.5000 4.0000 1.0000 1.5000 4.0000 1.0000 1.5000 4.0000 1.0000 1.5000 4.0000 Y= -2 -2 -2 -2 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2 >> Z=X.*exp(-X.^2-Y.^2) Z= Columns through -0.0007 -0.0029 -0.0067 -0.0135 -0.0582 -0.1353 -0.0366 -0.1581 -0.3679 -0.0135 -0.0582 -0.1353 -0.0071 -0.1433 -0.3894 -0.1433 0 0 0.5000 0.5000 0.5000 0.5000 0.5000 0 0 0.0071 0.1433 0.3894 0.1433 66 − y2 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy -0.0007 -0.0029 -0.0067 -0.0071 Columns through 0.0067 0.0029 0.0007 0.1353 0.0582 0.0135 0.3679 0.1581 0.0366 0.1353 0.0582 0.0135 0.0067 0.0029 0.0007 ve mat voi lenh mesh ve mat voi lenh meshc 0.4 0.4 0.2 0.2 0 z z >> subplot(1,2,1) >> mesh(X,Y,Z) >> xlabel('x') >> ylabel('y') >> zlabel('z') >> title('ve mat voi lenh mesh') >> subplot(1,2,2) >> meshc(X,Y,Z) >> xlabel('x') >> ylabel('y') >> zlabel('z') >>title('ve mat voi lenh meshc') 0.0071 -0.2 -0.2 -0.4 -0.4 2 y 0 -2 -2 y x ve mat voi lenh meshz -2 -2 x ve mat voi lenh waterfall z z >> subplot(1,2,1) >> meshz(X,Y,Z) 0.4 0.4 >> xlabel('x') 0.2 0.2 >> ylabel('y') 0 >> zlabel('z') >> title('ve mat voi lenh meshz') -0.2 -0.2 >> subplot(1,2,2) -0.4 -0.4 >> waterfall(X,Y,Z) 2 >> xlabel('x') 2 0 >> ylabel('y') 0 y y -2 -2 x -2 -2 x >> zlabel('z') >> title('ve mat voi lenh waterfall') Lưu ý sử dụng hàm mesh có số phức đại lượng khơng phải số (NaN - not a number) Ví dụ: phương trình bán cầu: z = − x − y >> x=-1:0.2:1; >> y=-1:0.2:1; 67 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy >> [X,Y]=meshgrid(x,y); >> Z=sqrt(1-X.^2-Y.^2); >> mesh(X,Y,Z) ??? Error using ==> surface X, Y, Z, and C cannot be complex Nhận thấy ma trận Z có số phần tử phức Vì dùng lệnh mesh MATLAB thơng báo lỗi Do đó, để vẽ bán cầu ta phải giải vấn đề nảy sinh với số phức sau: Cách 1: Thay tất phần tử phức ma trận Z phần tử >> Z=real(Z); >> mesh(X,Y,Z) Cách 2: Thay tất phần tử phức ma trận Z đại lượng NaN Trong trường hợp MATLAB không vẽ lưới đến điểm >> I=find(imag(Z)~=0) % tìm số vị trí phần tử có phần ảo khác không I= [] >> Z(I)=NaN; >> mesh(X,Y,Z) 0.8 0.6 0.4 0.2 0.5 0.5 0 -0.5 -0.5 -1 -1 4.4.4.Vẽ mặt tô bóng từ ma trận lệnh surf, surfc Ví dụ: >> x=-2:0.5:2; >> y=-2:1:2; >> [X,Y]=meshgrid(x,y); >> Z=X.*exp(-X.^2-Y.^2); 68 Chương 4:Ðồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy >> surf(X,Y,Z) >> colormap(hot) Ta tạo nhiều lưới để có mặt mịn hơn: >> x=-2:0.2:2; >> y=-2:0.4:2; >> [X,Y]=meshgrid(x,y); >> Z=X.*exp(-X.^2-Y.^2); >> surf(X,Y,Z) >> colormap(cool) 0.4 0.5 0.2 0 -0.2 -0.4 -0.5 2 0 -2 -2 -2 -2 Lệnh surfc (X,Y,Z): vẽ mặt có đườn contour phía Lệnh surfl (X,Y,Z,s): vẽ mặt có bóng sáng Đối số s xác định hướng nguồn sáng bề mặt vẽ s vectơ tuỳ chọn hệ toạ độ decac hay toạ độ cầu Nếu không khai báo giá trị mặc định s 45o theo chiều kim đồng hồ từ vị trí người quan sát Khi vẽ đồ thị ta thay đổi số đặc điểm đồ thị tỉ lệ trục, giá trị giới hạn trục, màu kiểu đường cong đồ thị, hiển thị legend…ngay figure cách vào menu tools vào mục axes properties, line properties hay show legend… 69 ... định kèm với mô tả Linewidth lệnh plot Ðộ rộng đường vẽ mặc định 0.5 point ≈ 1/72 inch 56 Chương 4:? ?ồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Chiều cao dấu (marker) xác định kèm với mô tả... [2 4], MATLAB mặc định giá trị X [1 3] Trong trường hợp Vy ma trận số nhóm cột kích thước vectơ Vx 64 Chương 4:? ?ồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Ví dụ: thể đồ thị cột với số liệu... biến sử dụng đặc tính tốn học mảng MATLAB 65 Chương 4:? ?ồ họa với MATLAB Biên soạn: Nguyễn Thị Hồng Thúy Để vẽ bề mặt ta sử dụng hàm: mesh (X,Y,Z): nối điểm với lưới chữ nhật meshc (X,Y,Z): vẽ