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:
sgtitleserta 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:
k | Posisi pada grid 2x2 | k | Posisi pada grid 2x2 |
|---|---|---|---|
| 1 | kiri atas | 3 | kiri bawah |
| 2 | kanan atas | 4 | kanan bawah |
Berikut grid 2x2 lengkap dari contoh.m, diuji dengan pola headless:
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:
Jumlah panel di figur 1: 4
Grafik tersimpan: subplot-grid-2x2.pngMari kita bedah baris-baris kode di atas:
- Baris 4 (
f1 = figure('visible', 'off')): figur dibuat tanpa jendela agar skrip berjalan di lingkungan tanpa display;f1disimpan sebagai handle untuksaveas. - Baris 6 (
subplot(2, 2, 1)): MATLAB membagi figur menjadi grid 2x2 dan mengaktifkan sel kiri atas; empat perintah berikutnya (plotsampaiylabel) hanya menyentuh panel itu. - Baris 21 (
subplot(2, 2, 4)): panel kanan bawah diaktifkan —scattermengisi panel terakhir ini, bukan menimpa panel pertama. - Baris 26 (
numel(get(f1, 'Children'))): propertiChildrenfigur berisi handle seluruh axes di dalamnya; jumlah 4 memastikan tiapsubplotbenar-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:
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:
Grafik tersimpan: subplot-spanning.pngMari kita bedah baris-baris kode di atas:
- 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. - 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 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:
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 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 layoutTile 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.