Line plot, scatter, bar, dan histogram semuanya hidup di bidang dua dimensi. Namun sebagian data lahir dengan dua prediktor: elevasi sebuah bukit tergantung pada (x, y) sekaligus, keuntungan bergantung pada harga dan volume iklan, intensitas medan magnet bergantung pada dua koordinat ruang. Data berbentuk z = f(x, y) ini paling jujur diceritakan sebagai permukaan — gunungan, lembah, dan punggungan yang bisa dilihat dari berbagai sudut. Sebelum menggambar, ada satu konsep yang wajib dipahami dulu: meshgrid, jembatan dari dua vektor 1D menjadi pasangan matriks koordinat. Cakupan chapter ini:
meshgrid: membangun bidang koordinat dari vektor x dan ysurf(X, Y, Z)dan pewarnaan berdasarkan ketinggiancolormap,colorbar, danshading(interp/flat/faceted)view(az, el)untuk mengatur sudut pandangmesh,waterfall, dancontour3sebagai kerabat dekat
meshgrid: Dari Vektor ke Bidang Koordinat #
Aturannya: permukaan membutuhkan nilai z pada setiap kombinasi (x, y) — 41 nilai x dan 41 nilai y menghasilkan 1681 titik. Mekanismenya: [X, Y] = meshgrid(x, y) menduplikasi vektor-vektor itu menjadi dua matriks berukuran numel(y) × numel(x): X berisi nilai x yang berulang ke bawah (berubah sepanjang kolom), Y berisi nilai y yang berulang ke samping (berubah sepanjang baris). Pasangan (X(i,j), Y(i,j)) adalah koordinat node grid baris ke-i, kolom ke-j.
x = 1:3; % 3 titik pada sumbu x
y = [10 20]; % 2 titik pada sumbu y
[Xm, Ym] = meshgrid(x, y);
fprintf('Xm baris y=10: %d %d %d\n', Xm(1, :));
fprintf('Xm baris y=20: %d %d %d\n', Xm(2, :));
fprintf('Ym baris y=10: %d %d %d\n', Ym(1, :));
fprintf('Ym baris y=20: %d %d %d\n', Ym(2, :));Output yang Dihasilkan:
Xm baris y=10: 1 2 3
Xm baris y=20: 1 2 3
Ym baris y=10: 10 10 10
Ym baris y=20: 20 20 20Mari kita bedah hasil tersebut:
Xm(dua baris pertama): nilai x = 1, 2, 3 berulang identik di kedua baris — tiap baris mewakili satu nilai y.Ym(dua baris terakhir): nilai y konstan sepanjang baris (10 lalu 20) — tiap kolom mewakili satu nilai x.- Ukuran hasil: 2×3 =
numel(y)baris ×numel(x)kolom; pasangan(Xm(i,j), Ym(i,j))menyapu seluruh 6 kombinasi koordinat tanpa satu pun terlewat.
Setelah grid terbentuk, fungsi permukaan dievaluasi dengan operasi element-wise (.*, .^) — Z = X .* exp(-X.^2 - Y.^2) bekerja karena X, Y, Z kini berukuran sama.
surf: Menggambar Permukaan #
Aturannya: surf(X, Y, Z) menggambar permukaan dengan warna tiap patch mengikuti ketinggian Z (default: data warna = data ketinggian). Mekanismenya: permukaan dibangun dari sel persegi antar node grid; tinggi menentukan posisi z, warna diambil dari colormap yang dipetakan linear dari min(Z) ke max(Z); colorbar menampilkan peta itu sebagai skala. Kita pakai fungsi demo peaks — fungsi gauss-bergunung bawaan MATLAB yang juga tersedia di Octave:
x = linspace(-3, 3, 41);
[X, Y] = meshgrid(x, x);
Z = peaks(X, Y); % fungsi demo 2D bawaan MATLAB & Octave
fprintf('dimensi grid : %d x %d\n', size(Z, 1), size(Z, 2));
fprintf('Z minimum : %.4f\n', min(Z(:)));
fprintf('Z maksimum : %.4f\n', max(Z(:)));
fprintf('Z di (0,0) : %.4f\n', Z(21, 21));
f = figure('visible', 'off');
surf(X, Y, Z);
colormap(jet); % pemetaan ketinggian -> warna
shading interp; % interpolasi warna antar titik grid
colorbar; % skala warna <-> nilai Z
view(45, 30); % azimut 45 derajat, elevasi 30 derajat
xlabel('x');
ylabel('y');
zlabel('z = peaks(x, y)');
title('Permukaan fungsi peaks');
saveas(f, 'surf-peaks.png');
fprintf('Grafik tersimpan: surf-peaks.png\n');
delete(f);Output yang Dihasilkan:
dimensi grid : 41 x 41
Z minimum : -6.4914
Z maksimum : 8.0309
Z di (0,0) : 0.9810
Grafik tersimpan: surf-peaks.pngGrafik yang tersimpan: permukaan dengan satu puncak tinggi biru-hijau di kuadran kiri (maksimum 8.03), sebuah lembah dalam di tengah (minimum −6.49), dan punggungan sekunder di kanan; view(45, 30) memutar kamera sehingga kedua gunungan terlihat berjajar diagonal. Mari kita bedah baris-baris kode di atas:
- Baris 2 (
meshgrid(x, x)): grid persegi 41×41 pada rentang [−3, 3]; titik ke-21 tepat di koordinat (0, 0). - Baris 3 (
Z = peaks(X, Y)): mengevaluasi fungsi demo pada seluruh node grid — hasilnya matriks 41×41 (1681 nilai). - Baris 4-7 (
fprintf): verifikasi numerik permukaan — nilaiZ(21,21) = 0.9810adalahpeaks(0, 0), pusat lembah-kontur yang nanti muncul lagi di chapter Contour Plot. - Baris 10 (
surf(X, Y, Z)): menggambar permukaan; tanpacolormap/shadingtambahan, warna default sudah mengikutiZ. - Baris 12 (
shading interp): menghapus garis kisi dan menghaluskan transisi warna (lihat tabel di bawah). - Baris 14 (
view(45, 30)): sudut pandang defaultview(-37.5, 30)diputar ke azimut 45° — azimut mengelilingi permukaan, elevasi menaikkan mata pengamat.
shading: interp, flat, faceted #
shading mengatur bagaimana tiap sel grid diwarnai:
| Opsi | Perilaku | Kesan visual |
|---|---|---|
shading faceted (default) | satu warna per sel + garis kisi hitam | kotak-kotak terlihat jelas |
shading flat | satu warna per sel tanpa garis kisi | mosaik halus |
shading interp | warna diinterpolasi antar node | permukaan mulus seperti foto |
Grid 41×41 dengan interp sudah terlihat mulus; pada grid kasar (misal 10×10), faceted justru lebih jujur memperlihatkan resolusi data.
mesh dan Kerabatnya #
Keluarga permukaan punya tiga kerabat yang jawabannya berbeda:
| Fungsi | Yang digambar | Kapan dipakai |
|---|---|---|
mesh(X, Y, Z) | kerangka kawat (wireframe) berwarna di tepi | melihat struktur grid dan di balik gunungan |
waterfall(X, Y, Z) | hanya garis sepanjang satu arah (kolom) | menekankan profil per kolom, mirip kain yang jatuh |
contour3(X, Y, Z, n) | garis level di ruang 3D | jembatan menuju contour plot 2D |
f2 = figure('visible', 'off');
mesh(X, Y, Z);
xlabel('x');
ylabel('y');
zlabel('z');
title('Mesh: kerangka kawat');
saveas(f2, 'mesh-peaks.png');
fprintf('Grafik tersimpan: mesh-peaks.png\n');
delete(f2);Output yang Dihasilkan:
Grafik tersimpan: mesh-peaks.pngGrafik yang tersimpan: kerangka kawat permukaan yang sama — karena badan permukaan transparan, lembah di balik puncak utama ikut terlihat. waterfall dan contour3 dipanggil dengan argumen yang identik (waterfall(X, Y, Z) dan contour3(X, Y, Z, 12)) dan keduanya teruji berjalan di lingkungan Octave yang sama.
Berkas contoh.m pada bagian bawah halaman menjalankan grid mini, permukaan surf penuh dengan colormap dan shading, serta versi mesh.
Ringkasan #
meshgrid mengubah dua vektor menjadi pasangan matriks koordinat — prasyarat semua plot permukaan — dan evaluasi fungsi berlangsung element-wise pada matriks itu. surf menggambar permukaan berwarna menurut ketinggian, colormap + colorbar mengunci makna warnanya, shading mengatur halusnya, dan view memilih sudut pandang. mesh membuka badan permukaan menjadi kawat, waterfall dan contour3 menyiapkan transisi ke pandangan dari atas — pandangan yang di chapter berikutnya kita susun jadi peta lengkap: contour plot.