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 y
  • surf(X, Y, Z) dan pewarnaan berdasarkan ketinggian
  • colormap, colorbar, dan shading (interp/flat/faceted)
  • view(az, el) untuk mengatur sudut pandang
  • mesh, waterfall, dan contour3 sebagai 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.

matlab
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:

text
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 20

Mari kita bedah hasil tersebut:

  1. Xm (dua baris pertama): nilai x = 1, 2, 3 berulang identik di kedua baris — tiap baris mewakili satu nilai y.
  2. Ym (dua baris terakhir): nilai y konstan sepanjang baris (10 lalu 20) — tiap kolom mewakili satu nilai x.
  3. 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:

matlab
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:

text
dimensi grid : 41 x 41
Z minimum    : -6.4914
Z maksimum   : 8.0309
Z di (0,0)   : 0.9810
Grafik tersimpan: surf-peaks.png

Grafik 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:

  1. Baris 2 (meshgrid(x, x)): grid persegi 41×41 pada rentang [−3, 3]; titik ke-21 tepat di koordinat (0, 0).
  2. Baris 3 (Z = peaks(X, Y)): mengevaluasi fungsi demo pada seluruh node grid — hasilnya matriks 41×41 (1681 nilai).
  3. Baris 4-7 (fprintf): verifikasi numerik permukaan — nilai Z(21,21) = 0.9810 adalah peaks(0, 0), pusat lembah-kontur yang nanti muncul lagi di chapter Contour Plot.
  4. Baris 10 (surf(X, Y, Z)): menggambar permukaan; tanpa colormap/shading tambahan, warna default sudah mengikuti Z.
  5. Baris 12 (shading interp): menghapus garis kisi dan menghaluskan transisi warna (lihat tabel di bawah).
  6. Baris 14 (view(45, 30)): sudut pandang default view(-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:

OpsiPerilakuKesan visual
shading faceted (default)satu warna per sel + garis kisi hitamkotak-kotak terlihat jelas
shading flatsatu warna per sel tanpa garis kisimosaik halus
shading interpwarna diinterpolasi antar nodepermukaan 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:

FungsiYang digambarKapan dipakai
mesh(X, Y, Z)kerangka kawat (wireframe) berwarna di tepimelihat 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 3Djembatan menuju contour plot 2D
matlab
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:

text
Grafik tersimpan: mesh-peaks.png

Grafik 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.