“Produk mana yang paling laku?” adalah pertanyaan yang tidak bisa dijawab line plot — urutan bulan tidak punya makna ketika yang dibandingkan adalah kategori: produk, kota, kuartal. Bar chart menggeser fokus dari tren sepanjang urutan ke perbandingan antar kategori: tinggi batang adalah nilainya, posisi batang adalah kategorinya. Fungsi bar() di MATLAB berlapis-lapis: satu matriks bisa berarti batang berdampingan (grouped) atau bertumpuk (stacked), dan error bar bisa ditumpangkan untuk menunjukkan ketidakpastian. Cakupan chapter ini:
bar(y)danbar(x, y)dengan label kategori- Grouped bar dari input matriks
- Stacked bar dengan opsi
'stacked' - Overlay
errorbar(rata-rata ± simpangan baku) barhuntuk batang horizontal, lebar batang, dan warna
Batang untuk Kategori #
Aturannya: bar(y) menggambar satu batang per elemen y, diletakkan pada posisi x = 1, 2, 3, …; bar(x, y) memindahkan posisi batang ke koordinat x yang kita tentukan. Mekanismenya: MATLAB membuat satu objek Bar per seri; label kategori bukan bagian dari data — kita mengganti tick sumbu x dengan teks melalui properti XTickLabel pada axes.
produk = {'Kopi'; 'Teh'; 'Cokelat'};
bar(1:3, [120 98 142]);
set(gca, 'XTick', 1:3, 'XTickLabel', produk);Grafik yang dihasilkan: tiga batang setinggi 120, 98, dan 142 pada posisi 1–3, dengan label sumbu x bertuliskan Kopi, Teh, Cokelat. Data kategori boleh juga berupa categorical di MATLAB — labelnya otomatis menjadi tick tanpa XTickLabel; contoh course memakai cell array of char karena bentuk ini berjalan juga di Octave.
Grouped Bar dari Matriks #
Aturannya: bar(x, Y) dengan Y berupa matriks menggambar satu kelompok batang per baris Y, satu batang per kolom, berdampingan. Mekanismenya: MATLAB memanggil tiap kolom sebagai satu seri, menggeser batang dalam kelompok agar tidak bertumpuk, dan memberi warna berbeda per kolom — siap pakai untuk legend. Kita pakai data penjualan tiga produk di dua kuartal (baris = produk, kolom = kuartal):
produk = {'Kopi'; 'Teh'; 'Cokelat'};
jual = [120 135; % Kopi : kuartal 1, kuartal 2
98 110; % Teh
142 150]; % Cokelat
totalKuartal = sum(jual, 1);
fprintf('total kuartal 1 : %d\n', totalKuartal(1));
fprintf('total kuartal 2 : %d\n', totalKuartal(2));
fprintf('total per produk: %d %d %d\n', sum(jual, 2));
fprintf('mean per produk : %.1f %.1f %.1f\n', mean(jual, 2));
f = figure('visible', 'off');
hb = bar(1:3, jual); % lebar batang default 0.8
set(hb(1), 'FaceColor', [0.2 0.5 0.8]); % warna batang kuartal 1
set(hb(2), 'FaceColor', [0.9 0.6 0.2]); % warna batang kuartal 2
set(gca, 'XTick', 1:3, 'XTickLabel', produk);
xlabel('Produk');
ylabel('Unit terjual');
title('Penjualan per produk: dua kuartal');
legend('Kuartal 1', 'Kuartal 2');
saveas(f, 'bar-grouped-errorbar.png');Output yang Dihasilkan:
total kuartal 1 : 360
total kuartal 2 : 395
total per produk: 255 208 292
mean per produk : 127.5 104.0 146.0
Grafik tersimpan: bar-grouped-errorbar.pngGrafik yang tersimpan: enam batang dalam tiga kelompok — setiap produk punya dua batang (biru kuartal 1, oranye kuartal 2) — semua produk mencatat kenaikan dari kuartal 1 ke kuartal 2. Mari kita bedah baris-baris kode di atas:
- Baris 6 (
totalKuartal = sum(jual, 1)): menjumlahkan menurun kolom — total 360 dan 395 per kuartal, pembanding arah agregasi untuksum(jual, 2)(255, 208, 292 per produk) yang menjadi tinggi batang stacked. - Baris 12 (
hb = bar(1:3, jual)): matriks 3×2 menghasilkan 3 kelompok × 2 batang;hbadalah handle vektor berisi dua objek Bar (satu per kolom/seri). - Baris 13-14 (
set(hb(1), 'FaceColor', ...)): mewarnai per seri lewat elemen handle — RGB[0.2 0.5 0.8]berarti 20% merah, 50% hijau, 80% biru. - Baris 15 (
set(gca, 'XTick', ...)): mengganti angka 1–3 dengan nama produk;gcamenunjuk axes aktif (pola state-based). - Baris 20 (
saveas(f, ...)): menyimpan figur ke PNG.
Overlay Errorbar #
Angka rata-rata tanpa ukuran sebaran bisa menyesatkan — produk dengan rata-rata 127 bisa datang dari penjualan yang stabil atau liar. Aturannya: errorbar(x, y, e) menambahkan garis vertikal sepanjang ±e di atas titik (x, y); karena bar dan errorbar menggambar objek berbeda, keduanya digabung dengan hold on. Mekanismenya: e biasanya dihitung dari data — std(jual, 0, 2) menghitung simpangan baku sampel (pembagi N−1, flag 0) per baris (dim 2 = per produk).
hold on;
he = errorbar(1:3, mean(jual, 2), std(jual, 0, 2), 'k.');
set(he, 'LineWidth', 1.5);
hold off;LineSpec 'k.' memakai penanda titik hitam tanpa garis penghubung — tiga titik hitam berdiri di atas kelompok batang masing-masing, masing-masing diberi sungkupan ± 1 simpangan baku. Di MATLAB, pasangan name-value bisa langsung ditempelkan pada panggilan errorbar(...); contoh di atas memakai pola set(he, ...) agar identik di Octave.
Stacked Bar #
Aturannya: bar(Y, 'stacked') menampilkan setiap kelompok (baris Y) sebagai satu batang multiwarna — tinggi batang adalah jumlah seluruh baris, segmennya adalah seri (kolom). Mekanismenya: dengan matriks 3×2, tiap baris (produk) menjadi satu batang pada posisi 1–3; dua segmen menyusun tiap produk — kuartal 1 di bawah, kuartal 2 menumpuk di atasnya — sehingga pertanyaan yang dijawab berubah dari “berapa tiap kuartal” menjadi “berapa total tiap produk dan dari kuartal mana datangnya”.
f2 = figure('visible', 'off');
bar(jual, 'stacked');
set(gca, 'XTick', 1:3, 'XTickLabel', produk);
xlabel('Produk');
ylabel('Unit terjual');
title('Total penjualan per produk, disusun per kuartal');
legend('Kuartal 1', 'Kuartal 2');
saveas(f2, 'bar-stacked.png');
fprintf('Grafik tersimpan: bar-stacked.png\n');
delete(f2);Output yang Dihasilkan:
Grafik tersimpan: bar-stacked.pngGrafik yang tersimpan: tiga batang — Kopi setinggi 255 (120 + 135), Teh 208, dan Cokelat 292 — masing-masing tersusun dari dua segmen kuartal; legend('Kuartal 1', 'Kuartal 2') menjelaskan warna segmennya.
Varian bar dan Properti yang Sering Dipakai #
| Panggilan | Bentuk yang dihasilkan | Kapan dipakai |
|---|---|---|
bar(y) | satu batang per elemen | satu seri kategori |
bar(x, y) | batang pada posisi x kustom | posisi bermakna (kuartal, tahun) |
bar(x, y, w) | mengatur lebar batang (w, default 0.8) | batang rapat/longgar |
bar(x, Y) matriks | grouped: satu kelompok batang per baris | bandingkan sub-kategori |
bar(Y, 'stacked') | stacked: satu batang multiwarna per baris (tinggi = jumlah baris) | kontribusi terhadap total |
barh(y) | batang horizontal | label kategori panjang (nama lengkap) |
barh bekerja dengan logika yang sama dengan bar, hanya sumbunya ditukar — kategori berjalan di sumbu y, sehingga nama panjang seperti nama produk atau nama kota muat tanpa diputar 45°. Label kategori untuk barh diatur lewat YTickLabel, bukan XTickLabel.
Berkas contoh.m pada bagian bawah halaman menjalankan ketiga grafik sekaligus (grouped + errorbar, lalu stacked) beserta ringkasan numerik sum(jual,1), sum(jual,2), mean(jual,2), dan total keseluruhan.
Ringkasan #
bar(x, y) membandingkan kategori lewat tinggi batang, matriks input otomatis menjadi grouped bar dengan kelompok per baris, dan opsi 'stacked' mengubah pertanyaan dari “berapa nilai tiap seri” menjadi “dari mana total tiap kelompok datang”. Label kategori masuk lewat XTickLabel, warna dan lebar diatur lewat handle objek Bar, serta errorbar dengan hold on menempelkan ketidakpastian ± std di atas kelompok batang. Ketika pertanyaan berikutnya adalah “bagaimana data tersebar dalam satu variabel”, bukan “berapa per kategori”, alat yang tepat adalah histogram.