Seringkali satu analisis menghasilkan banyak grafik: tren bulanan, distribusi, deviasi, dan data kumulatif. Membuka empat figur terpisah memaksa kita berpindah-pindah jendela; perbandingan pola jadi lambat. Solusinya adalah layout multi-panel: seluruh grafik hidup dalam satu figur yang bisa disimpan sebagai satu gambar. Cakupan chapter ini:

  • Grid klasik subplot(m,n,k) beserta urutan pengisian panel
  • Panel yang melebar menggabungkan beberapa sel (subplot spanning)
  • Judul per panel dan judul figur: sgtitle serta alternatif portabelnya
  • Layout modern tiledlayout/nexttile (MATLAB R2019b+) dan perapatan jarak panel

Grid Klasik subplot(m,n,k) #

Aturannya: satu figur dapat menampung banyak panel dengan membagi area gambarnya menjadi grid m baris kali n kolom. Mekanismenya di balik layar: subplot(m,n,k) membuat objek axes baru di sel ke-k, lalu menjadikan axes tersebut axes aktif — perintah plot, title, atau xlabel berikutnya menempel pada panel itu sampai subplot lain dipanggil. Nomor k dihitung baris demi baris dari kiri ke kanan, sama seperti kita membaca teks:

kPosisi pada grid 2x2kPosisi pada grid 2x2
1kiri atas3kiri bawah
2kanan atas4kanan bawah

Berikut grid 2x2 lengkap dari contoh.m, diuji dengan pola headless:

matlab
bulan     = 1:12;
penjualan = [120 135 128 150 142 168 155 172 160 185 178 195];

f1 = figure('visible', 'off');

subplot(2, 2, 1);
plot(bulan, penjualan, '-o');
title('Panel 1: tren bulanan');
xlabel('Bulan'); ylabel('Unit');

subplot(2, 2, 2);
bar(bulan, penjualan);
title('Panel 2: bar per bulan');
xlabel('Bulan'); ylabel('Unit');

subplot(2, 2, 3);
stem(bulan, penjualan - mean(penjualan), 'filled');
title('Panel 3: deviasi dari rata-rata');
xlabel('Bulan'); ylabel('Unit');

subplot(2, 2, 4);
scatter(bulan, cumsum(penjualan), 'filled');
title('Panel 4: kumulatif');
xlabel('Bulan'); ylabel('Total unit');

fprintf('Jumlah panel di figur 1: %d\n', numel(get(f1, 'Children')));

saveas(f1, 'subplot-grid-2x2.png');
fprintf('Grafik tersimpan: subplot-grid-2x2.png\n');

Output yang Dihasilkan:

text
Jumlah panel di figur 1: 4
Grafik tersimpan: subplot-grid-2x2.png

Mari kita bedah baris-baris kode di atas:

  1. Baris 4 (f1 = figure('visible', 'off')): figur dibuat tanpa jendela agar skrip berjalan di lingkungan tanpa display; f1 disimpan sebagai handle untuk saveas.
  2. Baris 6 (subplot(2, 2, 1)): MATLAB membagi figur menjadi grid 2x2 dan mengaktifkan sel kiri atas; empat perintah berikutnya (plot sampai ylabel) hanya menyentuh panel itu.
  3. Baris 21 (subplot(2, 2, 4)): panel kanan bawah diaktifkan — scatter mengisi panel terakhir ini, bukan menimpa panel pertama.
  4. Baris 26 (numel(get(f1, 'Children'))): properti Children figur berisi handle seluruh axes di dalamnya; jumlah 4 memastikan tiap subplot benar-benar membuat panel baru.

Panel yang Melebar (Subplot Spanning) #

Aturannya: satu panel boleh melebar menggabungkan beberapa sel bila k diganti vektor indeks. Mekanismenya: subplot(2, 2, [1 2]) membuat satu axes yang menempati gabungan sel 1 dan 2, sehingga panel atas menjadi dua kali lebih lebar — pas untuk grafik tren yang butuh ruang horizontal, sementara dua panel bawah tetap berdiri sendiri:

matlab
f2 = figure('visible', 'off');

subplot(2, 2, [1 2]);                % panel atas melebar 2 kolom
plot(bulan, penjualan, '-o');
title('Tren setahun (menggabungkan sel 1 dan 2)');
xlabel('Bulan'); ylabel('Unit');

subplot(2, 2, 3);
bar(bulan(1:6), penjualan(1:6));
title('Semester 1');
xlabel('Bulan ke-'); ylabel('Unit');

subplot(2, 2, 4);
bar(bulan(7:12), penjualan(7:12));
title('Semester 2');
xlabel('Bulan ke-'); ylabel('Unit');

saveas(f2, 'subplot-spanning.png');
fprintf('Grafik tersimpan: subplot-spanning.png\n');

Output yang Dihasilkan:

text
Grafik tersimpan: subplot-spanning.png

Mari kita bedah baris-baris kode di atas:

  1. Baris 3 (subplot(2, 2, [1 2])): grid tetap 2x2; axes hanya dibuat satu untuk dua sel — indeks vektor [1 2] berarti kolom baris atas digabung, bukan dua panel terpisah.
  2. Baris 8 dan 13 (subplot(2, 2, 3) / subplot(2, 2, 4)): sel 3 dan 4 tetap tersedia karena spanning hanya mengambil sel 1 dan 2 — penomoran grid tidak bergeser.

Judul Panel dan Judul Figur #

Setiap panel mendapat title() sendiri, sehingga pembaca tahu apa isi tiap kotak. Judul figur (satu judul untuk seluruh grid) di MATLAB modern dipegang sgtitle sejak R2018b:

matlab
% MATLAB R2018b+ — judul figur di atas seluruh grid:
sgtitle('Penjualan Toko Budi 2026', 'FontSize', 13, 'FontWeight', 'bold');

GNU Octave belum menyediakan sgtitle, dan suptitle juga tidak ada di pustaka intinya. Alternatif yang teruji di kedua lingkungan adalah annotation('textbox', ...) yang menempel pada koordinat figur (0 sampai 1 dari kiri-bawah) — versi inilah yang dipakai contoh.m:

matlab
annotation(f1, 'textbox', [0.1 0.94 0.8 0.06], ...
    'String', 'Penjualan Toko Budi 2026', 'EdgeColor', 'none', ...
    'HorizontalAlignment', 'center', 'FontWeight', 'bold', 'FontSize', 13);

tiledlayout dan nexttile #

MATLAB R2019b memperkenalkan tiledlayout sebagai pengganti subplot yang direkomendasikan MathWorks. Mekanismenya: tiledlayout membuat layout pembibit panel sekali di depan, lalu nexttile mengisi tile berikutnya tanpa kita menghitung indeks — dan jarak antar panel diatur lewat properti TileSpacing serta Padding:

matlab
% MATLAB R2019b+ — padanan grid 2x2 dengan jarak rapat:
t = tiledlayout(2, 2, 'TileSpacing', 'compact', 'Padding', 'compact');
nexttile;  plot(bulan, penjualan, '-o');  title('Tren');
nexttile;  bar(bulan, penjualan);         title('Bar');
nexttile;  stem(bulan, penjualan, 'filled');  title('Deviasi');
nexttile;  scatter(bulan, cumsum(penjualan), 'filled');  title('Kumulatif');
title(t, 'Penjualan Toko Budi 2026')    % judul figur lewat objek layout

Tile juga bisa melebar seperti subplot spanning: nexttile(1, [1 2]) menempatkan axes pada tile 1 dengan bentang 1 baris kali 2 kolom. Bentuk tiledlayout('flow') bahkan menata panel otomatis ketika jumlah grafik belum diketahui saat kode ditulis — dua kelebihan yang tidak dimiliki subplot klasik. GNU Octave belum mengimplementasikan tiledlayout/nexttile, sehingga seluruh kode teruji pada chapter ini memakai subplot yang bekerja di kedua lingkungan.

Merapatkan Jarak Antar Panel #

Jarak default subplot cukup lega karena tiap panel menyediakan ruang label sumbu. Saat panel berbagi sumbu-x, ruang itu terbuang. MATLAB menjawab dengan TileSpacing/Padding (lihat bagian sebelumnya); cara portabel yang bekerja di mana saja adalah subplot('Position', [left bottom width height]) dengan koordinat 0 sampai 1 relatif figur — misalnya [0.08 0.60 0.88 0.32] untuk panel atas dan [0.08 0.10 0.88 0.42] untuk panel bawah yang butuh ruang label lebih besar.

Ringkasan #

subplot(m,n,k) membagi figur menjadi grid dan mengaktifkan sel ke-k secara baris-per-baris; vektor indeks seperti [1 2] membuat panel melebar. Judul figur modern memakai sgtitle (MATLAB R2018b+) atau annotation('textbox', ...) yang portabel, dan tiledlayout/nexttile (R2019b+) menawarkan jarak panel yang lebih terkendali. Grafik yang sudah tertata multi-panel masih butuh nama pada sumbu dan seri datanya — tugas Chapter Labels, Title, dan Legend.