ADMIN: nhanguyen@hcmut.edu.vn

9. Đồ thị

Đồ thị hai chiều

Để vẽ đồ thị, sử dụng lệnh plot

x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y),title('Hinh 1')
z=cos(x);
plot(x,y,x,z), title('Hinh 2')

Cách khác để vẽ 2 đồ thị trên 1 hình

W=[y;z];
plot(x,W), title('Hinh 3')

Các dạng đường, điểm và màu

ColorLinestyle
b
g:
r-.
c
m
y
k
w
MarkerMarker
.v
o^
x<
+>
*p
sh
d

Ví dụ:

plot(x,y,'b:p',x,z,'c-',x,z,'m+')
title(‘Hinh 4’)

Lưới, trục và nhãn

x=linspace(0,2*pi,30);
y=sin(x);
z=cos(x);
plot(x,y,x,z)
box off
xlabel('Bien độc lập x')
ylabel('Bien phụ thuộc y, z')
title('Plot')
grid on, box on
text(2.5,0.7,'sin(x)')
gtext('cos(x)')
set(gcf,'color','white'); 

Điều khiển trục đồ thị:

Lệnh
axis([xmin  xmax  ymin  ymax])
axis square
axis equal
axis normal
axis off
axis on

Ví dụ:

x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y)
axis([0  2*pi  -1.5  2])   % Miền hiển thị trục x từ 0 đến 2pi, trục y từ -1.5 đến 2
% Để tắt hiển thị trục, dùng lệnh axis off

Vẽ nhiều đồ thị:

x=linspace(0,2*pi,30);
y=sin(x);
z=cos(x);
plot(x,y,'m')
hold on  % Vẽ thêm đồ thị vào figure hiện tại
plot(x,z,'b')

Vẽ đồ thị con:

Để vẽ nhiều đồ thị con, dùng subplot(m,n,p)

x=linspace(0,2*pi,30);
y=sin(x); z=cos(x);
a=2*sin(x).*cos(x);
b=sin(x)./(cos(x)+eps);

subplot(2,2,1)
plot(x,y,'b'),axis([0  2*pi  -1  1])
subplot(2,2,2)
plot(x,z,'r'),axis([0  2*pi  -1  1])
subplot(2,2,3)
plot(x,a,'k'),axis([0  2*pi  -1  1])
subplot(2,2,4)
plot(x,b,'g'),axis([0  2*pi  -20  20])

Đồ thị ba chiều

Đồ thị đường:

Cú pháp:
>>plot3(x1, y1, z1, S1,  x2, y2, z2, S2…)
t = 0:pi/50:10*pi; 
plot3(sin(t),cos(t),t)
xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t') 
axis square; grid on;
text(0,0,0,'Origin')

Vẽ nhiều đường

x=linspace(0,3*pi); 
z1=sin(x);
z2=sin(2*x);
z3=sin(3*x);
y1=zeros(size(x));
y3=ones(size(x));
y2=y3/2;

plot3(x,y1,z1,x,y2,z2,x,y3,z3)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis') 
grid on

Vẽ ma trận các dữ liệu

[X,Y] = meshgrid([-2:0.1:2]); 
Z = X.*exp(-X.^2-Y.^2); 
plot3(X,Y,Z)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis') 
grid on

Đồ thị lưới

Cú pháp:
>>mesh(X,Y,Z)
[X,Y] = meshgrid(-8:.5:8); 
R = sqrt(X.^2 + Y.^2) + eps; 
Z = sin(R)./R; 
mesh(X,Y,Z)
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis') 

Để thấy luôn lưới mặt khuất, dùng thêm lệnh hidden off

Một số kiểu vẽ lưới

meshc(X,Y,Z)	% Đồ thị lưới có các đường mức
meshz(X,Y,Z)	% Đồ thị lưới với mặt phẳng zero

Đồ thị dạng mặt

Cú pháp:
>>surf(X,Y,Z)
[X,Y] = meshgrid(-8:.5:8); 
R = sqrt(X.^2 + Y.^2) + eps; 
Z = sin(R)./R; 
surf(X,Y,Z)
Để bỏ đi đường lưới, dùng lệnh shading flat
Để làm mịn vùng màu, dùng lệnh shading interp

Ngoài ra còn nhiều loại đồ thị lưới khác

surfc(X,Y,Z) %Đồ thị mặt có các đường mức
surfl(X,Y,Z) %Đồ thị mặt có hiệu ứng ánh sáng
surfnorm(X,Y,Z) %Đồ thị mặt có pháp tuyến
[X,Y,Z] =peaks(30);
surfl(X,Y,Z)
shading interp
colormap pink
% Đồ thị có pháp tuyến
surfnorm(X,Y,Z)

Đồ thị đường mức

contour(X,Y,Z,N)	%Đồ thị đường mức 2 chiều
contour3(X,Y,Z,N)	%Đồ thị đường mức 3 chiều
pcolor(X,Y,Z)	        %Đồ thị chuyển cao độ tỉ lệ với màu
contourf(X,Y,Z,N)	%Đồ thị đường mức 2 chiều có màu

Ví dụ:

% Đường mức 2 chiều
[X,Y,Z] =peaks;
contour(X,Y,Z,20)
% Đường mức 3 chiều
contour3(X,Y,Z,20)
% Đồ thị màu cao độ
pcolor(X,Y,Z)
shading interp
contourf(X,Y,Z,20)
C = contour(X,Y,Z,20);  % tương tự cho contour3 và contourf
clabel(C)

Màu sắc:

Màu được định nghĩa từ 3 màu chính RGB có 3 cột, 1 hàng giá trị từ 0->1

RedGreenBlueColor
100red
010green
001blue
110yellow
101magenta
011cyan
000black
111white

Màu kết hợp:

RedGreenBlueColor
00.50dark green
0.6701violet
10.50orange
0.500dark red
0.50.50.5medium gray

Matlab cung cấp nhiều phổ màu đặc biệt

Standard ColormapDescription
hsvPhổ màu 7 sắc bắt đầu và kết thúc là màu đỏ
jetbắt đầu là màu đỏ và kết thúc là màu xanh dương
hot, coolMàu nóng và màu lạnh
summer,autumn,winter,springMàu của bốn mùa
white,gray,bone,pinkBiến thiên từ màu đó đến màu trắng
copperMàu đồng
[x,y,z]=peaks;
mesh(x,y,z);
colormap(hsv)
axis([-3  3  -3  3  -6  8])
colorbar		% hiển thị phổ màu

Để sử dụng nhiều hơn một phổ, dùng lệnh sau:

mymap=[hsv(32);copper(32)];
colormap(mymap)
mesh(peaks+8);
view(90,0)
hold on
mesh(peaks-8);
colorbar
hold off

Đồ thị động

  • Dùng lệnh pause để làm chậm tốc độ vẽ của chương trình.
  • Nếu cần thiết, dùng lệnh hold on để vẽ các đồ thị sau mà vẫn giữ được các đồ thị trước.
Cú pháp: 
	>> pause(n)	% n: 0.01 giây
clear all
x=linspace(0,2*pi);
y=sin(x);
for i=1:100
    plot(x(i),y(i),'*','markersize',10)
    pause(0.2)
end
clear all
x=linspace(0,2*pi);
y=sin(x);
for i=1:100
    plot(x(i),y(i), '*','markersize',10)
    axis([0 2*pi+.2 -1.2 1.2])
    hold on
    pause(0.2)
end