Angka di Command Window menjawab pertanyaan “berapa”, tetapi pertanyaan seperti “kapan tren berbalik” atau “distribusi ini miring atau simetris” lebih cepat dijawab oleh mata daripada oleh tabel. Visualisasi mengubah kolom data menjadi bentuk yang bisa dikenali mata manusia: garis naik, gundukan, titik yang bergerombol. Sebelum kita memanggil puluhan fungsi grafik MATLAB, kita perlu satu peta mental yang sama: semua grafik MATLAB hidup di dalam struktur figure → axes → objek data. Cakupan chapter ini:

  • Anatomi grafik: figure, axes, dan objek data (Line, Scatter, Bar)
  • Dua gaya API: state-based (plot) vs object-based (axes eksplisit)
  • Fungsi gcf dan gca, serta mekanisme hold on / hold off
  • Panduan memilih jenis grafik sesuai pertanyaan yang diajukan data
  • Prinsip kejujuran visual: skala dan clipping

Anatomi Sebuah Grafik #

Aturannya: setiap grafik MATLAB tersusun bertingkat. Figure adalah jendela (kanvas) yang menampung semua elemen; axes adalah bidang koordinat dengan sumbu x, sumbu y, label, dan judul; objek data — Line, Scatter, Bar, Surface — adalah bentuk yang benar-benar digambar di atas bidang koordinat itu. Mekanismenya: ketika fungsi seperti plot() dieksekusi, MATLAB tidak menggambar langsung ke layar; fungsi tersebut membuat objek Line, menempelkannya sebagai children dari axes tertentu, lalu mesin render menampilkan hasilnya.

Diagram tersebut menunjukkan hubungan kepemilikan: satu figure boleh berisi banyak axes (bab Subplot membahasnya), dan satu axes boleh berisi banyak objek data. Hubungan ini bisa kita buktikan lewat properti Children — daftar anak langsung dari sebuah objek grafik:

matlab
bulan = 1:12;
unit  = [120 135 98 142 150 160 155 148 170 165 180 190];

f  = figure('visible', 'off');   % 1. figure = kanvas
ax = axes('Parent', f);          % 2. axes   = bidang koordinat
plot(ax, bulan, unit, '-o', 'LineWidth', 1.5, 'MarkerSize', 6);  % 3. objek data Line
xlabel(ax, 'Bulan');
ylabel(ax, 'Unit terjual');
title(ax, 'Penjualan tahunan');

fprintf('jumlah axes di dalam figure : %d\n', numel(get(f, 'Children')));
fprintf('jumlah objek di dalam axes   : %d\n', numel(get(ax, 'Children')));

Output yang Dihasilkan:

text
jumlah axes di dalam figure : 1
jumlah objek di dalam axes   : 1

Mari kita bedah baris-baris kode di atas:

  1. Baris 4 (f = figure(...)): membuat objek figure baru dan menyimpan handle-nya di variabel f; argumen 'visible', 'off' dipakai untuk uji headless sehingga jendela tidak muncul.
  2. Baris 5 (ax = axes(...)): membuat axes dan secara eksplisit menempelkannya ke figure f lewat pasangan 'Parent', f.
  3. Baris 6 (plot(ax, bulan, unit, '-o', ...)): membuat objek Line di dalam ax — argumen pertama ax adalah target, yaitu axes tujuan penggambaran.
  4. Baris 11-12 (get(f, 'Children')): membaca daftar anak; figure berisi 1 axes, dan axes berisi 1 objek Line — hierarki pada diagram terbukti di data.

Dua Gaya API: State-Based vs Object-Based #

Aturannya: MATLAB menyediakan dua cara mengarahkan perintah grafik. Gaya state-based memakai konsep “figure saat ini” dan “axes saat ini” — plot(x, y) tanpa target otomatis menggambar ke axes aktif. Gaya object-based menyimpan handle axes secara eksplisit lalu meneruskannya sebagai argumen pertama: plot(ax, x, y).

Mekanismenya: MATLAB menyimpan pointer current figure (gcf, get current figure) dan current axes (gca, get current axes). Fungsi grafik tanpa argumen target akan memanggil gca di balik layar, membuat axes baru bila belum ada. Dengan subplot, keadaan “axes saat ini” berpindah tiap kali subplot baru dipanggil — inilah sumber kejutan klasik: kode plot tiba-tiba menggambar di panel yang salah.

AspekState-basedObject-based
Contoh panggilanplot(x, y)plot(ax, x, y)
Target penggambaranaxes aktif (gca)axes yang kita pegang
Mengatur propertiset(gca, 'XLim', [0 13])set(ax, 'XLim', [0 13])
Risiko di script multi-paneltinggi (target bisa berpindah)rendah (target eksplisit)
Cocok untukeksplorasi cepat interaktifscript dan fungsi yang rapi

hold on dan hold off #

Aturannya: secara default, perintah grafik baru menghapus isi axes sebelum menggambar — seri kedua menimpa seri pertama. Mekanismenya: properti NextPlot pada axes mengatur perilaku ini; hold on mengubah nilai properti menjadi 'add' sehingga objek baru ditambahkan tanpa pembersihan, sedangkan hold off mengembalikan perilaku timpa-menimpa.

matlab
hold(ax, 'on');
plot(ax, bulan, unit * 0.5, 'r--');
hold(ax, 'off');
fprintf('jumlah objek setelah hold on : %d\n', numel(get(ax, 'Children')));

Output yang Dihasilkan:

text
jumlah objek setelah hold on : 2

Bentuk tanpa argumen target (hold on) memakai gca — identik perilakunya untuk kasus satu axes. Angka 2 membuktikan objek Line kedua ditambahkan, bukan menggantikan: dua seri kini tampil bersama di satu bidang koordinat.

Memilih Jenis Grafik #

Aturannya: jenis grafik ditentukan oleh pertanyaan, bukan oleh selera. Tabel berikut memetakan pertanyaan data yang paling sering muncul ke jenis grafik MATLAB yang menjawabnya:

PertanyaanJenis grafikFungsi inti
Bagaimana nilai berubah menurut urutan/waktu?line plotplot
Bagaimana dua variabel berhubungan?scatter plotscatter
Bagaimana membandingkan kategori?bar chartbar, barh
Bagaimana sebaran satu variabel?histogramhistogram, hist
Bagaimana distribusi antar grup?box plotboxchart, boxplot
Bagaimana permukaan dua prediktor (z = f(x,y))?surface / contoursurf, contour

Setiap baris tabel adalah satu chapter di section ini; kita akan menguji semuanya dengan dataset penjualan (bulan, unit) dan suhu yang sudah dipakai sejak section Pengolahan Data.

Prinsip Kejujuran Visual #

Aturannya: grafik yang bisa dipercaya menjaga dua hal — skala yang adil dan data yang tidak terpotong diam-diam. Mekanismenya: MATLAB menskalakan sumbu secara otomatis dari rentang data (XLim, YLim hasil autoscale), dan nilai di luar XLim/YLim disimpan penuh di objek tetapi tidak digambar (clipping). Kedua mekanisme ini netral; ketidakjujuran muncul dari pilihan kita.

Dua jebakan yang paling sering muncul:

  • Sumbu y bar chart tidak mulai dari nol — selisih batang yang terlihat “dramatis” sebenarnya hanya beberapa persen; aturan praktis: bar chart wajib ylim mulai dari 0 karena luas batang adalah kanal persepsi.
  • Clipping menyembunyikan puncak data — saat set(ax, 'YLim', [0 150]) memotong puncak 190, pembaca tidak tahu ada data di atas 150; jika pemotongan memang disengaja (misal fokus pada detail), nyatakan di judul atau catatan.

Berkas contoh.m pada bagian bawah halaman merangkai seluruh konsep di atas: membuat figure dan axes eksplisit, menggambar objek Line, mengatur XLim/YLim lewat set, membuktikan efek hold on lewat jumlah Children, lalu menyimpan grafik ke berkas PNG.

Ringkasan #

Setiap grafik MATLAB adalah hierarki figure → axes → objek data yang bisa kita telusuri lewat Children dan kendalikan lewat handle dengan get/set. Gaya state-based mengandalkan gcf/gca dan cocok untuk eksplorasi cepat; gaya object-based dengan target eksplisit menjaga kode tetap terprediksi. hold on menambah objek tanpa menghapus yang lama, pilihan jenis grafik mengikuti pertanyaan data, dan kejujuran visual dijaga lewat skala yang adil serta clipping yang dinyatakan terbuka. Dengan peta mental ini, kita siap menggambar grafik pertama yang paling sering dipakai: line plot.