MATLAB là một trong những môi trường lập trình mạnh mẽ và linh hoạt nhất hiện nay, đặc biệt trong việc xử lý và trực quan hoá dữ liệu khoa học. Khi làm việc với dữ liệu ba chiều, việc tạo ra các biểu đồ, mô hình và hình ảnh 3D không chỉ giúp người dùng hiểu rõ hơn về cấu trúc dữ liệu mà còn hỗ trợ trong việc trình bày kết quả nghiên cứu một cách sinh động và chuyên nghiệp. Bài viết dưới đây sẽ cung cấp cho bạn một hướng dẫn chi tiết, từ những khái niệm cơ bản nhất đến các kỹ thuật nâng cao, giúp bạn nhanh chóng làm chủ cách vẽ hình 3D trong MATLAB.
TÓM TẮT
- 1 1. Giới Thiệu Tổng Quan Về Đồ Thị 3D Trong MATLAB
- 2 2. Chuẩn Bị Môi Trường MATLAB
- 3 3. Các Bước Cơ Bản Để Vẽ Hình 3D
- 4 4. Tùy Chỉnh Đồ Thị 3D Để Trình Bày Chuyên Nghiệp
- 5 5. Các Chủ Đề Nâng Cao
- 6 6. Thực Hành: Dự Án Mini – Vẽ Địa Hình Đáy Biển
- 7 7. Các Lỗi Thường Gặp Khi Vẽ 3D và Cách Khắc Phục
- 8 8. Tổng Kết
1. Giới Thiệu Tổng Quan Về Đồ Thị 3D Trong MATLAB
1.1. Tại sao cần vẽ 3D?
- Hiểu cấu trúc không gian: Nhiều hiện tượng trong tự nhiên và kỹ thuật (địa chất, khí tượng, cơ học, y học…) đều diễn tả trong không gian ba chiều.
- Phân tích dữ liệu phức tạp: Khi dữ liệu có nhiều biến, việc biểu diễn chúng trên mặt phẳng 2D có thể gây mất thông tin. Đồ thị 3D giúp hiển thị đồng thời ba biến hoặc hai biến kèm theo màu sắc, kích thước để truyền tải thông tin đa chiều.
- Trình bày chuyên nghiệp: Các bài báo, báo cáo, thuyết trình thường yêu cầu hình ảnh trực quan, sinh động, và đồ thị 3D đáp ứng yêu cầu này.
1.2. Các loại đồ thị 3D phổ biến trong MATLAB
| Loại đồ thị | Hàm MATLAB tương ứng | Ứng dụng điển hình |
|---|---|---|
| Surface (bề mặt) | surf, mesh, surfc |
Địa hình, nhiệt độ, áp suất |
| Contour 3D | contour3, contourf |
Đường đồng mức trong không gian |
| Scatter 3D | scatter3 |
Phân tán dữ liệu điểm |
| Plot 3D (đường) | plot3 |
Đường quỹ đạo, đường cong không gian |
| Voxel / Volume Rendering | volshow, slice |
Y học (MRI, CT), mô phỏng khí tượng |
| Quiver 3D (vector field) | quiver3 |
Trường vector, dòng chảy |
| Patch (đa giác) | patch |
Mô hình 3D tùy chỉnh, mô hình CAD |
2. Chuẩn Bị Môi Trường MATLAB
2.1. Cài đặt MATLAB
MATLAB có sẵn trên Windows, macOS và Linux. Đảm bảo bạn đã cài đặt phiên bản mới nhất (từ R2023b trở lên) để được hỗ trợ các hàm đồ họa 3D mới nhất như volshow. Nếu chưa có bản quyền, bạn có thể dùng bản MATLAB Online hoặc MATLAB Student.

Có thể bạn quan tâm: Cách Vẽ Hình 3d Trong Geogebra: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
2.2. Thư viện cần thiết
- Core MATLAB: Đủ để thực hiện hầu hết các đồ thị 3D.
- Toolbox:
- Signal Processing Toolbox (nếu làm việc với dữ liệu tín hiệu 3D).
- Image Processing Toolbox (đối với volume rendering,
slice). - Aerospace Toolbox (đối với mô phỏng quỹ đạo,
plot3). - Statistics and Machine Learning Toolbox (cho
scatter3nâng cao).
Lưu ý: Các hàm như
volshowyêu cầu Computer Vision Toolbox hoặc Deep Learning Toolbox cho một số tính năng nâng cao.
2.3. Cấu hình đồ họa
MATLAB sử dụng OpenGL để render 3D. Để kiểm tra trạng thái:
opengl info
Nếu gặp lỗi render, có thể chuyển sang phần mềm:
opengl('software')
Hoặc cập nhật driver GPU.
3. Các Bước Cơ Bản Để Vẽ Hình 3D
3.1. Tạo dữ liệu mẫu
3.1.1. Lưới (grid) cho bề mặt
% Tạo lưới X, Y
x, y = meshgrid(-5:0.1:5, -5:0.1:5);
% Hàm số Z = sin(sqrt(x^2 + y^2))
r = sqrt(x.^2 + y.^2);
z = sin(r);
3.1.2. Dữ liệu điểm (scatter)
N = 500;
x = randn(N,1) 3;
y = randn(N,1) 3;
z = randn(N,1) 3;
c = sqrt(x.^2 + y.^2 + z.^2); % màu phụ thuộc vào khoảng cách gốc
3.1.3. Dữ liệu vector (quiver)
xv, yv, zv = meshgrid(-2:1:2, -2:1:2, -2:1:2);
u = -yv; v = xv; w = zeros(size(xv));
3.2. Vẽ Surface (bề mặt)
3.2.1. Sử dụng surf
figure;
surf(x, y, z);
title('Bề mặt sin(r)');
xlabel('X'); ylabel('Y'); zlabel('Z');
colorbar; % hiển thị thang màu
shading interp; % làm mịn màu
3.2.2. Sử dụng mesh
figure;
mesh(x, y, z);
title('Mesh của sin(r)');
xlabel('X'); ylabel('Y'); zlabel('Z');
3.2.3. Thêm Contour 3D
hold on;
contour3(x, y, z, 20, 'k'); % 20 mức contour màu đen
hold off;
3.3. Vẽ Scatter 3D

Có thể bạn quan tâm: Cách Vẽ Hình 20 × 10: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
figure;
scatter3(x, y, z, 36, c, 'filled');
title('Scatter 3D với màu phụ thuộc vào khoảng cách');
xlabel('X'); ylabel('Y'); zlabel('Z');
colorbar;
view(45,30); % góc nhìn
3.4. Vẽ Đường 3D (plot3)
t = linspace(0, 4pi, 200);
x = sin(t);
y = cos(t);
z = t;
figure;
plot3(x, y, z, 'LineWidth', 2);
grid on;
title('Đường xoắn ốc');
xlabel('X'); ylabel('Y'); zlabel('Z');
3.5. Vẽ Vector Field (quiver3)
figure;
quiver3(xv, yv, zv, u, v, w, 'AutoScale','on');
title('Trường vector 3D');
xlabel('X'); ylabel('Y'); zlabel('Z');
axis equal;
3.6. Volume Rendering (đối với dữ liệu 3D)
Giả sử chúng ta có một volume MRI 3D (volData), kích thước 128x128x64.
% Tạo dữ liệu mẫu volume (gaussian blobs)
xv, yv, zv = ndgrid(linspace(-1,1,64), linspace(-1,1,64), linspace(-1,1,32));
volData = exp(-((xv.^2 + yv.^2 + (zv-0.5).^2)/0.1)) + 0.5exp(-((xv+0.3).^2 + (yv-0.3).^2 + (zv+0.2).^2)/0.05);
figure;
volshow(volData);
title('Volume Rendering với volshow');
Nếu không có volshow, dùng slice:
figure;
slice(volData, 32, 32, 16);
shading interp;
title('Slice của volume');
4. Tùy Chỉnh Đồ Thị 3D Để Trình Bày Chuyên Nghiệp
4.1. Điều chỉnh góc nhìn (view)
view(az, el):azlà góc quay quanh trục Z (azimuth),ellà góc cao (elevation).view(x y z): Đặt vector camera.camorbit,camroll,camzoomđể tạo hiệu ứng quay, lăn, thu phóng.
% Quay 360 độ quanh đối tượng
for az = 0:5:360 view(az,30); drawnow;
end
4.2. Định dạng trục và lưới

Có thể bạn quan tâm: Cách Vẽ Hàng Cây Xanh Đẹp Và Sống Động: Hướng Dẫn Từng Bước Cho Người Mới Bắt Đầu
ax = gca;
ax.FontSize = 12;
ax.TickLabelInterpreter = 'latex';
ax.XColor = 0.2 0.2 0.8;
ax.YColor = 0.2 0.8 0.2;
ax.ZColor = 0.8 0.2 0.2;
grid on;
box on;
4.3. Thêm ánh sáng và vật liệu
% Thêm ánh sáng
light('Position',1 1 5,'Style','infinite');
lighting gouraud; % hoặc phong (phong)
material shiny; % hoặc metal, dull
4.4. Tô màu và colormap
MATLAB cung cấp nhiều colormap (parula, jet, hot, cool, viridis, cividis). Đối với 3D, thường dùng colormap(parula) để tránh màu quá chói.
colormap(parula);
caxis(-1 1); % giới hạn màu
4.5. Ghi hình (animation) và xuất file
% Tạo video
v = VideoWriter('animation.mp4','MPEG-4');
open(v);
figure;
surf(x,y,z);
for az = 0:5:360 view(az,30); frame = getframe(gcf); writeVideo(v,frame);
end
close(v);
4.6. Export đồ họa chất lượng cao
print(gcf,'-dpng','-r300','my3dplot.png'); % 300 DPI PNG
exportgraphics(gcf,'my3dplot.pdf','ContentType','vector'); % PDF vector
5. Các Chủ Đề Nâng Cao
5.1. Đồ thị 3D Tương tác với GUI

Có thể bạn quan tâm: Cách Vẽ Hàn Tuyết Rơi: Hướng Dẫn Chi Tiết Từng Bước Để Tạo Nên Những Bức Tranh Lãng Mạn Và Sắc Nét
MATLAB App Designer hoặc GUIDE cho phép tạo giao diện người dùng (UI) tương tác:
% Trong App Designer, kéo một UIAxes và đặt tên là uiAxes
% Callback để cập nhật dữ liệu khi người dùng thay đổi slider:
function SliderValueChanged(app, event) val = app.Slider.Value; z = sin(r + val); surf(app.UIAxes, x, y, z);
end
5.2. Đồ thị 3D với dữ liệu thực tế
5.2.1. Địa hình từ DEM (Digital Elevation Model)
% Đọc file DEM (GeoTIFF)
Z, R = readgeoraster('dem.tif');
x, y = meshgrid(1:size(Z,2), 1:size(Z,1));
figure;
surf(x, y, Z, 'EdgeColor','none');
colormap terrain;
colorbar;
title('Địa hình từ DEM');
5.2.2. Dữ liệu y tế (MRI, CT)
nii = niftiread('brain.nii');
volshow(nii);
5.3. Đồ thị 3D với dữ liệu lớn
Khi dữ liệu có hàng triệu điểm, việc render trực tiếp sẽ chậm. Giải pháp:
- Downsampling: Lấy mẫu ngẫu nhiên hoặc giảm độ phân giải.
- Octree / KD-Tree: Dùng
pcdownsample(Point Cloud) để giảm số điểm. - GPU Rendering: Sử dụng
gpuArrayvàscatter3trên GPU.
% Sử dụng gpuArray
xGPU = gpuArray(x);
yGPU = gpuArray(y);
zGPU = gpuArray(z);
scatter3(xGPU, yGPU, zGPU, 10, 'filled');
5.4. Đồ thị 3D trong Machine Learning
- t-SNE 3D:
tsnevớiNumDimensions=3. - PCA 3D:
pcavà vẽscatter3. - Deep Learning Feature Visualization: Trích xuất feature map và visualise bằng
montage3D.
% PCA ví dụ
data = randn(200,5);
coeff,score = pca(data);
scatter3(score(:,1), score(:,2), score(:,3), 50, score(:,3), 'filled');
colormap jet;
colorbar;
title('PCA 3D');
6. Thực Hành: Dự Án Mini – Vẽ Địa Hình Đáy Biển
6.1. Mô tả dự án
Ta sẽ tạo một mô hình địa hình đáy biển gồm:
– Độ sâu (negative Z) được mô phỏng bằng hàm sin + noise.
– Thêm các núi lửa dưới biển (gaussian bump).
– Vẽ vector field mô tả dòng chảy nước.

6.2. Bước thực hiện
% 1. Tạo lưới
x, y = meshgrid(-10:0.2:10, -10:0.2:10);
% 2. Độ sâu cơ bản
depth = -5 - 2sin(0.5sqrt(x.^2 + y.^2));
% 3. Nút lửa (gaussian)
volcano = exp(-((x-3).^2 + (y+2).^2)/2);
depth = depth - 3volcano; % tăng độ sâu tại vị trí núi lửa
% 4. Thêm noise
depth = depth + 0.3randn(size(depth)); % 5. Vẽ surface
figure('Color','w');
surf(x, y, depth);
shading interp;
colormap(parula);
caxis(-10 0);
colorbar;
title('Mô hình đáy biển');
xlabel('X (km)'); ylabel('Y (km)'); zlabel('Độ sâu (m)');
view(45,30);
hold on; % 6. Vẽ vector field (dòng chảy)
ux, uy = gradient(depth);
quiver3(x, y, depth, -ux, -uy, zeros(size(ux)), 0.5, 'k');
hold off;
Kết quả: Bạn sẽ có một bức tranh 3D sinh động của đáy biển, với các núi lửa, địa hình gợn sóng và dòng chảy nước.
7. Các Lỗi Thường Gặp Khi Vẽ 3D và Cách Khắc Phục
| Lỗi | Nguyên nhân | Giải pháp |
|---|---|---|
| Không hiển thị đồ thị | figure chưa mở, hoặc hold off sau surf |
Đảm bảo gọi figure hoặc clf trước khi vẽ. |
| Màu sắc không hiển thị đúng | caxis không phù hợp hoặc colormap không được đặt |
Thiết lập lại caxis và colormap. |
| Đồ thị chậm, lag | Dữ liệu quá lớn, không dùng shading interp |
Giảm độ phân giải, dùng downsample, hoặc gpuArray. |
| Ánh sáng không ảnh hưởng | lighting chưa bật hoặc material không phù hợp |
Thêm light và lighting gouraud trước khi vẽ. |
| Không thể xoay đồ thị trong GUI | UIAxes bị khóa Interaction |
Đặt app.UIAxes.Interactions = rotate3d. |
Lỗi volshow không tồn tại |
Toolbox không cài | Cài Computer Vision Toolbox hoặc dùng slice. |
8. Tổng Kết
Việc vẽ hình 3D trong MATLAB không chỉ là một kỹ năng cơ bản mà còn là nền tảng cho các ứng dụng chuyên sâu trong khoa học và kỹ thuật. Từ các hàm đơn giản như surf, mesh, scatter3 tới các kỹ thuật nâng cao như volume rendering, tương tác GUI, và tích hợp Machine Learning, MATLAB cung cấp một bộ công cụ phong phú, linh hoạt và mạnh mẽ.
Trong bài viết này, chúng ta đã:
- Hiểu rõ các loại đồ thị 3D và khi nào nên sử dụng chúng.
- Thiết lập môi trường và chuẩn bị dữ liệu mẫu.
- Thực hiện các ví dụ cơ bản: surface, mesh, scatter, plot3, quiver3 và volume rendering.
- Tùy chỉnh chi tiết: góc nhìn, ánh sáng, colormap, xuất file và tạo animation.
- Khám phá các chủ đề nâng cao: GUI tương tác, dữ liệu thực tế (DEM, MRI), xử lý dữ liệu lớn và ứng dụng trong Machine Learning.
- Thực hành dự án mini để củng cố kiến thức.
- Giải quyết các lỗi phổ biến để làm việc hiệu quả hơn.
Hy vọng sau khi đọc bài viết này, bạn đã nắm vững quy trình và các kỹ thuật cần thiết để tạo ra những hình ảnh 3D chất lượng cao trong MATLAB. Hãy tiếp tục khám phá, thử nghiệm các tham số khác nhau và kết hợp chúng với các công cụ phân tích dữ liệu để đưa ra những kết quả trực quan, ấn tượng và có giá trị thực tiễn. Chúc bạn thành công!
