“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) dan bar(x, y) dengan label kategori
  • Grouped bar dari input matriks
  • Stacked bar dengan opsi 'stacked'
  • Overlay errorbar (rata-rata ± simpangan baku)
  • barh untuk 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.

matlab
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):

matlab
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:

text
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.png

Grafik 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:

  1. Baris 6 (totalKuartal = sum(jual, 1)): menjumlahkan menurun kolom — total 360 dan 395 per kuartal, pembanding arah agregasi untuk sum(jual, 2) (255, 208, 292 per produk) yang menjadi tinggi batang stacked.
  2. Baris 12 (hb = bar(1:3, jual)): matriks 3×2 menghasilkan 3 kelompok × 2 batang; hb adalah handle vektor berisi dua objek Bar (satu per kolom/seri).
  3. 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.
  4. Baris 15 (set(gca, 'XTick', ...)): mengganti angka 1–3 dengan nama produk; gca menunjuk axes aktif (pola state-based).
  5. 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).

matlab
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”.

matlab
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:

text
Grafik tersimpan: bar-stacked.png

Grafik 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 #

PanggilanBentuk yang dihasilkanKapan dipakai
bar(y)satu batang per elemensatu seri kategori
bar(x, y)batang pada posisi x kustomposisi bermakna (kuartal, tahun)
bar(x, y, w)mengatur lebar batang (w, default 0.8)batang rapat/longgar
bar(x, Y) matriksgrouped: satu kelompok batang per barisbandingkan sub-kategori
bar(Y, 'stacked')stacked: satu batang multiwarna per baris (tinggi = jumlah baris)kontribusi terhadap total
barh(y)batang horizontallabel 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.