Peta topografi menggambarkan gunung tanpa pernah menggambar gunung itu sendiri — yang digambar adalah garis level: kurva-kurva yang menghubungkan titik-titik berketinggian sama. Data z = f(x, y) kita bisa diperlakukan sama: alih-alih memutar permukaan 3D untuk mencari sudut terbaik, contour plot menyajikan seluruh informasi ketinggian dalam satu bidang datar — posisi puncak, lembah, dan jalur berbentuk S terlihat seketika. Fungsi contour() dan sepupunya contourf() bekerja pada grid yang sama dengan surf, jadi modal meshgrid dari chapter sebelumnya langsung terpakai. Cakupan chapter ini:

  • contour(X, Y, Z) dan jumlah level
  • clabel untuk menuliskan nilai level pada garis
  • Level eksplisit dengan vektor [v1 v2 v3]
  • contourf (level terisi warna) + colorbar
  • contour3 dan pcolor sebagai kerabat, plus aplikasi nyata

Garis Level #

Aturannya: satu garis level menghubungkan semua titik tempat Z bernilai sama, persis seperti kontur 100 m pada peta pendakian. Mekanismenya: contour(X, Y, Z, n) meminta n level dengan nilai yang dipilih otomatis agar “rapi” (kelipatan bulat), menginterpolasi lintasan tiap level di antara node grid, lalu menggambar hasilnya sebagai objek Contour.

matlab
x = linspace(-3, 3, 41);
[X, Y] = meshgrid(x, x);
Z = peaks(X, Y);
fprintf('Z minimum  : %.4f\n', min(Z(:)));
fprintf('Z maksimum : %.4f\n', max(Z(:)));

f = figure('visible', 'off');
[C, h] = contour(X, Y, Z, 10);
clabel(C, h);                 % angka nilai z di sepanjang garis
xlabel('x');
ylabel('y');
title('Contour peaks: 10 level');
saveas(f, 'contour-peaks.png');
fprintf('Grafik tersimpan: contour-peaks.png\n');
delete(f);

Output yang Dihasilkan:

text
Z minimum  : -6.4914
Z maksimum : 8.0309
Grafik tersimpan: contour-peaks.png

Grafik yang tersimpan: peta datar permukaan peaks — cincin-cincin konsentris rapat di sekitar puncak utama (gradien curam), garis-garis renggang di dataran (gradien landai), dan angka ketinggian tertulis langsung di sepanjang tiap garis. Mari kita bedah baris-baris kode di atas:

  1. Baris 2 (meshgrid(x, x)): grid 41×41 yang sama dengan chapter Surface Plot — contour dan surf memakan data identik, hanya sudut pandangnya yang berbeda (dari atas vs miring).
  2. Baris 4-5 (fprintf): rentang Z (−6.49 sampai 8.03) memberi tahu level apa saja yang masuk akal — level diminta otomatis di dalam rentang ini.
  3. Baris 8 ([C, h] = contour(X, Y, Z, 10)): C adalah contour matrix (format dua baris, dibahas di bawah), h adalah handle objek Contour; grafik tetap digambar meskipun argumen output diminta — output hanya menambahkan akses data.
  4. Baris 9 (clabel(C, h)): menuliskan nilai level pada garisnya — tanpa clabel, pembaca harus menebak naik-turunnya dari kerapatan garis.

Membaca Contour Matrix #

Aturannya: bentuk dua-output contour mengembalikan contour matrix C berukuran 2×n — tiap segmen garis dibuka dengan kolom header [level; jumlah_titik] yang diikuti kolom-kolom koordinat (x, y)-nya. Mekanismenya: berjalan dari kolom ke kolom dengan lompatan jumlah_titik + 1 memungkinkan kita mengurai semua segmen tanpa menggambar apa pun. Trik ini berguna saat level tertentu perlu diekstrak untuk perhitungan turunan atau klasifikasi wilayah.

matlab
% C2 berasal dari contour(X, Y, Z, [-2 0 2]) pada bagian berikutnya.
idx = 1; levelList = [];
while idx <= size(C2, 2)
    levelList = [levelList, C2(1, idx)];   % catat level tiap segmen
    idx = idx + C2(2, idx) + 1;            % lompat ke header segmen berikutnya
end
fprintf('level unik     : %s\n', mat2str(unique(levelList)));
fprintf('jumlah segmen  : %d\n', numel(levelList));

Output yang Dihasilkan:

text
level unik     : [-2 0 2]
jumlah segmen  : 7

Penjelasannya: tiga nilai level yang diminta memang tergambar, tetapi satu level bisa terpecah menjadi beberapa segmen — level −2 tersusun dari 2 kurva, level 0 dari 3 kurva, dan level 2 dari 2 kurva, sehingga total segmennya 7, bukan 3.

Level Eksplisit #

Aturannya: mengganti n dengan vektor level contour(X, Y, Z, v) memaksa garis digambar tepat pada nilai-nilai v — nilai yang dipilih pengguna, bukan mesin. Mekanismenya: tiap nilai di v dicari lintasannya dengan permukaan; level yang tidak pernah tersentuh permukaan tidak menghasilkan garis (misal v = 100 pada data berketinggian maksimum 8.03).

matlab
f2 = figure('visible', 'off');
[C2, h2] = contour(X, Y, Z, [-2 0 2]);
clabel(C2, h2);
xlabel('x');
ylabel('y');
title('Level eksplisit: z = -2, 0, 2');
saveas(f2, 'contour-level.png');
fprintf('Grafik tersimpan: contour-level.png\n');
delete(f2);

Output yang Dihasilkan:

text
Grafik tersimpan: contour-level.png

Grafik yang tersimpan: hanya tiga keluarga garis — pita dalam lembah (z = −2, dua kurva), kontur nol yang membelah wilayah naik dan turun (z = 0, tiga kurva), dan cincin di lereng puncak (z = 2). Untuk menggambar satu level saja, tulis nilainya dua kali: contour(X, Y, Z, [0 0]) — bentuk dua elemen inilah yang direkomendasikan dokumentasi MATLAB untuk satu level; vektor satu elemen seperti [0] tidak dijamin digambar di semua implementasi.

contourf: Peta Terisi Warna #

Aturannya: contourf(X, Y, Z, n) mengisi wilayah antar garis level dengan warna datar — peta kontur klasik berwarna seperti peta cuaca. Mekanismenya: contourf menghitung batas level yang sama dengan contour, lalu tiap pita diisi satu warna dari colormap; colorbar memetakan warna kembali ke angka.

matlab
f3 = figure('visible', 'off');
contourf(X, Y, Z, 8);
colormap(jet);
colorbar;
xlabel('x');
ylabel('y');
title('Contourf: peta terisi warna');
saveas(f3, 'contourf-peaks.png');
fprintf('Grafik tersimpan: contourf-peaks.png\n');
delete(f3);

Output yang Dihasilkan:

text
Grafik tersimpan: contourf-peaks.png

Grafik yang tersimpan: peta berlapis — pusat lembah biru tua, naik melalui hijau dan kuning hingga puncak merah, dengan batas putus yang tegas antar pita; colorbar di sisi kanan mencantumkan nilai batas tiap warna. Perbandingannya dengan surf: contourf mengorbankan kesan tiga dimensi demi pres pembacaan — nilai ketinggian terbaca dari legenda, bukan dari interpretasi perspektif.

Kerabat Dekat: contour3 dan pcolor #

Dua fungsi pelengkap menutup keluarga kontur:

FungsiYang digambarKapan dipakai
contour3(X, Y, Z, n)garis level pada ketinggian aslinya di ruang 3Djembatan visual antara contour dan surface
pcolor(X, Y, Z)kotak-kotak warna sesuai node grid (dari atas)grid kasar; dipadukan shading flat
contourf(X, Y, Z, n)pita antar level terisi warnapeta cuaca/laporan berwarna

pcolor menyala sel satu warna per node sehingga bentuk alami datanya adalah grid kecil (misal matriks 5×5); pada grid 41×41 hasilnya nyaris tak dibedakan dari contourf — resolusi data memudar di balik warna. contour3 memanggil argumen yang sama dengan contour (contour3(X, Y, Z, 12)) dan mengangkat tiap kurva ke ketinggian z-nya.

Aplikasi kontur tersebar di semua bidang teknis: meteorologi (isobar tekanan udara, isoterm suhu), geodesi (kontur elevasi), elektromagnetika (potensial dan medan), mesin (medan suhu pada pelat logam), hingga machine learning (kurva level fungsi biaya saat memvisualisasikan loss landscape). Semua berbagi prinsip yang sama: data skalar di atas bidang dua dimensi, dibaca lewat kurva bernilai sama.

Berkas contoh.m pada bagian bawah halaman menghasilkan ketiga grafik (kontur berlabel, level eksplisit, dan contourf) sekaligus mengurai contour matrix-nya.

Ringkasan #

contour memproyeksikan data z = f(x, y) dari atas menjadi kurva-kurva bernilai sama; clabel menuliskan nilainya, level eksplisit [v1 v2] mengunci garis pada ketinggian pilihan, dan contourf mengisi pita antar level dengan warna dari colormap + colorbar. Contour matrix C membuka akses programatik ke tiap segmen level, sementara contour3 dan pcolor melengkapi keluarga dengan pandangan 3D dan kotak grid. Peta, medan, dan lanskap fungsi kini bisa kita baca dalam satu bidang datar — dan seluruh perangkat visualisasi dasar sudah lengkap.