Mở Đầu

MATLAB (Matrix Laboratory) là một trong những môi trường lập trình mạnh mẽ và phổ biến nhất trong lĩnh vực kỹ thuật, khoa học và nghiên cứu. Không chỉ được sử dụng để xử lý dữ liệu, giải quyết các bài toán tính toán phức tạp, MATLAB còn cung cấp một bộ công cụ đồ họa (plotting) rất đa dạng, cho phép người dùng nhanh chóng biến các dãy số, mô hình và kết quả mô phỏng thành những hình ảnh trực quan, dễ hiểu.

Trong bài viết này, chúng ta sẽ đi sâu vào cách vẽ đồ thị MATLAB một cách chi tiết, từ những lệnh cơ bản nhất cho tới các kỹ thuật nâng cao như tùy chỉnh trục, màu sắc, chú thích, tạo đồ thị đa chiều, và thậm chí là xây dựng giao diện người dùng (GUI) cho đồ thị. Bài viết được chia thành nhiều phần, mỗi phần sẽ giải thích lý thuyết kèm theo ví dụ thực hành, giúp người đọc không chỉ biết “làm sao” mà còn hiểu “tại sao” và “khi nào” nên áp dụng các kỹ thuật khác nhau.

Lưu ý: Để theo dõi các ví dụ, bạn cần cài đặt MATLAB trên máy tính và mở môi trường làm việc (MATLAB Command Window hoặc MATLAB Live Script). Nếu chưa có, bạn có thể tải bản dùng thử từ trang MathWorks.

1. Kiến Thức Cơ Bản Về Đồ Thị Trong MATLAB

1.1. Các Lệnh Plot Cơ Bản

MATLAB cung cấp một loạt các hàm để vẽ đồ thị 2D và 3D. Dưới đây là một số lệnh thường gặp:

Hàm Mô tả Ví dụ
plot Vẽ đồ thị đường (line plot) cho dữ liệu 1‑dimensional. plot(x, y)
scatter Vẽ đồ thị điểm (scatter plot) với tùy chọn kích thước và màu. scatter(x, y, 36, c)
stem Vẽ đồ thị cột (stem plot) cho dữ liệu rời rạc. stem(x, y)
bar Vẽ biểu đồ cột (bar chart). bar(x, y)
pie Vẽ biểu đồ tròn (pie chart). pie(data)
histogram Vẽ histogram (phân bố tần suất). histogram(data, 20)
plot3 Vẽ đồ thị đường trong không gian 3D. plot3(x, y, z)
surf Vẽ bề mặt 3D. surf(X, Y, Z)
mesh Vẽ lưới 3D. mesh(X, Y, Z)
contour Vẽ đường mức (contour plot). contour(X, Y, Z)

1.2. Cấu Trúc Dữ Liệu Cơ Bản

  • Vector: Dòng hoặc cột một chiều, ví dụ x = 0:0.1:2pi;.
  • Matrix: Hai chiều, ví dụ A = rand(5,3);.
  • 3‑D Array: Ba chiều, ví dụ B = rand(10,10,10);.

Hầu hết các hàm vẽ đồ thị yêu cầu đầu vào là vector hoặc matrix. Khi làm việc với dữ liệu đa chiều, chúng ta thường phải tạo ra lưới (meshgrid) để chuyển đổi dữ liệu thành dạng phù hợp.

1.3. Lệnh figure, subplot và hold

  • figure tạo một cửa sổ đồ họa mới. Ví dụ: figure; plot(x,y);.
  • subplot(m,n,p) chia cửa sổ thành lưới m x n và chọn vị trí p để vẽ. Ví dụ: subplot(2,2,1); plot(x,y);.
  • hold on / hold off giữ lại đồ thị hiện tại để vẽ thêm các đối tượng mới. Ví dụ:
    matlab plot(x1, y1, 'r'); hold on; plot(x2, y2, '--b'); hold off;

2. Vẽ Đồ Thị 2D Cơ Bản

2.1. Vẽ Đồ Thị Hàm Số

% Định nghĩa khoảng x
x = linspace(0, 2pi, 500);
% Các hàm cần vẽ
y1 = sin(x);
y2 = cos(x);
y3 = sin(x) . cos(x); % Tạo figure
figure;
plot(x, y1, 'r-', 'LineWidth', 2); % Đường đỏ dày 2
hold on;
plot(x, y2, 'b--', 'LineWidth', 1.5); % Đường xanh gạch đứt
plot(x, y3, 'k:', 'LineWidth', 1); % Đường đen chấm
hold off; % Thêm tiêu đề và nhãn
title('Đồ thị các hàm sin, cos và sincos');
xlabel('x (radian)');
ylabel('Giá trị hàm');
legend('sin(x)', 'cos(x)', 'sin(x)cos(x)');
grid on;

Giải thích:
– linspace tạo một vector có 500 điểm đều nhau trong khoảng 0, 2π.
– Tham số 'r-', 'b--', 'k:' xác định màu và kiểu đường.
– LineWidth điều chỉnh độ dày của đường.
– grid on bật lưới để dễ đọc.

Cách Vẽ Đồ Thị Matlab
Cách Vẽ Đồ Thị Matlab

2.2. Đồ Thị Scatter (Điểm Rải Rác)

% Dữ liệu ngẫu nhiên
N = 200;
x = randn(N,1);
y = randn(N,1);
c = sqrt(x.^2 + y.^2); % Màu dựa trên khoảng cách tới gốc figure;
scatter(x, y, 36, c, 'filled'); % 36 là kích thước điểm
colormap jet; % Áp dụng bảng màu jet
colorbar; % Hiển thị thanh màu
title('Scatter plot với màu dựa trên khoảng cách');
xlabel('X');
ylabel('Y');
axis equal; % Tỷ lệ trục bằng nhau
grid on;

Lưu ý: Khi dùng scatter, tham số thứ ba là kích thước điểm, tham số thứ tư là màu (có thể là vector hoặc ma trận RGB). colormap và colorbar giúp hiển thị bảng màu và thang đo.

2.3. Bar Chart (Biểu Đồ Cột)

% Dữ liệu doanh thu
months = {'Jan','Feb','Mar','Apr','May','Jun'};
sales = 150, 200, 180, 220, 210, 190; figure;
bar(sales, 'FaceColor', 0.2 0.6 0.8); % Màu xanh nhạt
set(gca, 'XTickLabel', months); % Đặt nhãn trục X
title('Doanh thu theo tháng');
ylabel('Triệu đồng');
grid on;

2.4. Histogram (Phân Bố Tần Suất)

data = randn(1000,1); % Dữ liệu chuẩn tắc figure;
histogram(data, 30, 'Normalization', 'pdf', 'FaceColor', 0.8 0.2 0.2);
hold on;
% Vẽ đường chuẩn tắc
x = linspace(min(data), max(data), 100);
y = normpdf(x, 0, 1);
plot(x, y, 'k', 'LineWidth', 1.5);
hold off;
title('Histogram và đường chuẩn tắc');
xlabel('Giá trị');
ylabel('Mật độ');
grid on;

3. Đồ Thị 3D Cơ Bản

3.1. Đồ Thị Đường 3D (plot3)

t = linspace(0, 4pi, 400);
x = sin(t);
y = cos(t);
z = t; figure;
plot3(x, y, z, 'm', 'LineWidth', 2);
grid on;
title('Đường xoắn 3D');
xlabel('X');
ylabel('Y');
zlabel('Z');
view(45,30); % Đặt góc nhìn

3.2. Bề Mặt 3D (surf)

% Tạo lưới
x, y = meshgrid(-2:0.1:2, -2:0.1:2);
z = x . exp(-x.^2 - y.^2); figure;
surf(x, y, z);
shading interp; % Làm mịn màu
colormap hot;
colorbar;
title('Bề mặt 3D: z = xexp(-x^2 - y^2)');
xlabel('X');
ylabel('Y');
zlabel('Z');
view(30,45);

3.3. Đồ Thị Contour (Đường Mức)

figure;
contour(x, y, z, 20, 'LineWidth', 1.2);
colorbar;
title('Contour của hàm z = xexp(-x^2 - y^2)');
xlabel('X');
ylabel('Y');
grid on;

3.4. Mesh và Wireframe

figure;
mesh(x, y, z);
colormap winter;
title('Mesh plot');
xlabel('X');
ylabel('Y');
zlabel('Z');

4. Tùy Chỉnh Đồ Thị (Formatting)

4.1. Thay Đổi Màu Sắc và Kiểu Đường

MATLAB hỗ trợ các ký hiệu màu và kiểu đường:

  • Màu: 'r' (đỏ), 'g' (xanh lá), 'b' (xanh dương), 'c' (xanh ngọc), 'm' (đỏ tía), 'y' (vàng), 'k' (đen), 'w' (trắng).
  • Kiểu đường: '-' (đồng nhất), '--' (gạch đứt), ':' (chấm), '-.' (gạch chấm).

Bạn có thể kết hợp chúng: 'r--', 'b:.'…

4.2. Đặt Giới Hạn Trục

Cách Vẽ Đồ Thị Matlab
Cách Vẽ Đồ Thị Matlab
axis(xmin xmax ymin ymax); % 2D
axis(xmin xmax ymin ymax zmin zmax); % 3D

Ví dụ: axis(0 2pi -1 1);

4.3. Thêm Nhãn và Chú Thích

  • title('Tiêu đề')
  • xlabel('Nhãn X')
  • ylabel('Nhãn Y')
  • zlabel('Nhãn Z') (đối với 3D)
  • legend('Series 1','Series 2')

4.4. Grid và Box

grid on; % Hiển thị lưới
grid minor; % Lưới phụ
box on; % Vây quanh đồ thị

4.5. Tạo Đồ Thị Nhiều Lớp (subplot)

figure;
subplot(2,2,1);
plot(x, sin(x));
title('sin(x)'); subplot(2,2,2);
plot(x, cos(x));
title('cos(x)'); subplot(2,2,3);
plot(x, tan(x));
title('tan(x)'); subplot(2,2,4);
plot(x, exp(-x));
title('exp(-x)');

5. Đồ Thị Nâng Cao

5.1. Vẽ Đồ Thị Đa Dữ Liệu Với yyaxis

Khi cần hai trục Y với thang đo khác nhau:

x = 0:0.1:10;
y1 = sin(x);
y2 = 100exp(-0.3x); figure;
yyaxis left;
plot(x, y1, '-b', 'LineWidth', 2);
ylabel('sin(x)'); yyaxis right;
plot(x, y2, '--r', 'LineWidth', 2);
ylabel('100exp(-0.3x)'); xlabel('x');
title('Đồ thị với hai trục Y');
legend('sin(x)', '100exp(-0.3x)');
grid on;

5.2. Đồ Thị Tương Tác (datatip, ginput)

  • Data Cursor Mode: Nhấp chuột vào đồ thị để xem giá trị.
    matlab datacursormode on;

  • Lấy điểm từ người dùng:
    matlab xclick, yclick = ginput(1); fprintf('Bạn đã chọn điểm (%.2f, %.2f)\n', xclick, yclick);

5.3. Đồ Thị Động (Animation)

Sử dụng vòng lặp và drawnow:

t = linspace(0, 2pi, 200);
figure;
h = plot(t, sin(t));
axis(0 2pi -1 1);
grid on;
title('Đồ thị sin(t) động'); for k = 1:100 set(h, 'YData', sin(t + k0.1)); drawnow; pause(0.05);
end

5.4. Export Đồ Thị Sang Định Dạng Khác

  • Lưu dưới dạng ảnh:
    matlab saveas(gcf, 'myPlot.png');
  • Lưu dưới dạng vector (PDF, EPS):
    matlab print(gcf, '-dpdf', 'myPlot.pdf'); print(gcf, '-depsc2', 'myPlot.eps');

5.5. Tạo Giao Diện Người Dùng (GUI) Cho Đồ Thị

MATLAB cung cấp uicontrol, uifigure, và App Designer. Dưới đây là ví dụ nhanh tạo một giao diện đơn giản:

function simplePlotGUI % Tạo cửa sổ UI fig = uifigure('Position',100 100 400 300,'Name','Plot GUI'); % Trục vẽ ax = uiaxes(fig,'Position',50 80 300 180); % Nút vẽ sin btnSin = uibutton(fig,'push','Text','Vẽ sin',... 'Position',50 30 80 30,... 'ButtonPushedFcn',@(btn,event) plotSin(ax)); % Nút vẽ cos btnCos = uibutton(fig,'push','Text','Vẽ cos',... 'Position',150 30 80 30,... 'ButtonPushedFcn',@(btn,event) plotCos(ax)); % Hàm vẽ sin function plotSin(ax) x = linspace(0,2pi,200); plot(ax, x, sin(x), '-r','LineWidth',2); title(ax,'sin(x)'); end % Hàm vẽ cos function plotCos(ax) x = linspace(0,2pi,200); plot(ax, x, cos(x), '--b','LineWidth',2); title(ax,'cos(x)'); end
end

Chạy simplePlotGUI trong Command Window để mở giao diện.

6. Thực Hành: Một Dự Án Đồ Thị Thực Tế

Giả sử bạn là kỹ sư điện tử và cần phân tích tín hiệu âm thanh. Dưới đây là quy trình từ thu thập dữ liệu tới trình bày đồ thị:

6.1. Bước 1 – Đọc Tập Tin Âm Thanh

Cách Vẽ Đồ Thị Matlab
Cách Vẽ Đồ Thị Matlab
signal, Fs = audioread('speech.wav'); % Fs là tần số mẫu
t = (0:length(signal)-1)/Fs; % Trục thời gian

6.2. Bước 2 – Vẽ Dạng Sóng Thời Gian

figure;
plot(t, signal);
xlabel('Thời gian (s)');
ylabel('Biên độ');
title('Dạng sóng âm thanh');
grid on;

6.3. Bước 3 – Phân Tích Tần Số (FFT)

N = length(signal);
Y = fft(signal);
P2 = abs(Y/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2P1(2:end-1);
f = Fs(0:(N/2))/N; figure;
plot(f, P1);
xlabel('Tần số (Hz)');
ylabel('|P1(f)|');
title('Biểu đồ phổ tần');
grid on;
xlim(0 4000); % Giới hạn tới 4 kHz

6.4. Bước 4 – Spectrogram (Biểu Đồ Thời Gian‑Tần Số)

figure;
spectrogram(signal,256,250,256,Fs,'yaxis');
title('Spectrogram của tín hiệu');
colorbar;

6.5. Bước 5 – Lưu Đồ Thị

saveas(gcf,'spectrogram.png');

Qua chuỗi bước trên, bạn đã chuyển đổi một file âm thanh thành các đồ thị mô tả dạng sóng, phổ tần và spectrogram, giúp phân tích đặc tính tín hiệu một cách trực quan.

7. Các Mẹo Và Thủ Thuật Khi Vẽ Đồ Thị MATLAB

  1. Sử dụng hold on một cách cẩn thận: Khi vẽ nhiều lớp, luôn nhớ hold off sau khi hoàn thành, tránh ảnh hưởng tới các đồ thị kế tiếp.
  2. Tối ưu hóa tốc độ: Khi vẽ hàng ngàn hoặc hàng triệu điểm, sử dụng plot thay cho scatter nếu không cần màu đa dạng; hoặc giảm số điểm bằng cách downsample.
  3. Tận dụng colormap: Các bảng màu chuẩn (parula, jet, hot, cool) có thể thay đổi cảm nhận trực quan. Tránh dùng quá nhiều màu tương phản mạnh khiến đồ thị khó đọc.
  4. Sử dụng exportgraphics (MATLAB R2020a trở lên): Đảm bảo độ phân giải cao khi xuất file.
    matlab exportgraphics(gcf,'myHighResFigure.pdf','Resolution',300);
  5. Kiểm tra kích thước figure: Đặt figure('Position',left bottom width height) để chuẩn hoá kích thước khi xuất báo cáo.
  6. Sử dụng tightfig (có trong File Exchange) để giảm khoảng trắng thừa xung quanh đồ thị.
  7. Ghi chú (comment) mã nguồn: Khi tạo đồ thị phức tạp, luôn để lại chú thích để người khác (hoặc chính bạn trong tương lai) hiểu ý định.

8. Tổng Kết

Trong suốt bài viết, chúng ta đã đi qua từ cách vẽ đồ thị MATLAB cơ bản tới nâng cao, bao gồm:

  • Các hàm vẽ 2D và 3D thông dụng.
  • Cách tùy chỉnh màu sắc, kiểu đường, nhãn, trục và lưới.
  • Kỹ thuật vẽ đa lớp, hai trục Y, đồ thị động và tương tác.
  • Xây dựng giao diện người dùng để người dùng cuối có thể tùy chỉnh đồ thị một cách dễ dàng.
  • Ứng dụng thực tế trong phân tích tín hiệu âm thanh.

MATLAB không chỉ là công cụ tính toán mạnh mẽ, mà còn là “cây bút vẽ” đa năng cho các nhà nghiên cứu, kỹ sư và sinh viên. Khi bạn nắm vững các lệnh và kỹ thuật trên, việc truyền tải kết quả dưới dạng hình ảnh sẽ trở nên nhanh chóng, chuyên nghiệp và thuyết phục.

Hãy thực hành: Tải dữ liệu thực tế, áp dụng các hàm đã học và thử nghiệm các tùy chỉnh. Đừng ngần ngại khám phá thêm các hàm nâng cao như heatmap, bubblechart, polarplot hoặc thậm chí tích hợp MATLAB với Python/LaTeX để tạo báo cáo tự động.

Chúc bạn thành công trong việc tạo ra những đồ thị ấn tượng và truyền đạt ý tưởng một cách trực quan nhất!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *