Histogram memperlihatkan bentuk sebaran satu variabel, tetapi laporan nyata hampir selalu bertanya “bandingkan sebaran antar grup”: suhu tiga kota, penjualan tiga produk, waktu respons dua server. Menampilkan tiga histogram berdampingan bukan jawaban yang enak dibaca — box plot memampatkan tiap sebaran menjadi satu kotak dengan antena: posisi median, lebar interkuartil, panjang whisker, dan titik-titik pencilan terlihat dalam sekali pandang. Cakupan chapter ini:
- Anatomi box plot: median, kuartil, whisker, dan outlier
boxplotklasik (Statistics and Machine Learning Toolbox)boxchartalternatif di MATLAB inti (R2020a+)- Padanan manual dengan
quantile+ primitif grafik (portabel, teruji)
Cara Membaca Box Plot #
Aturannya: satu kotak meringkas lima bilangan — minimum, Q1, median, Q3, maksimum — ditambah aturan pencilan. Mekanismenya: kotak membentang dari kuartil pertama (Q1) ke kuartil ketiga (Q3) — tingginya adalah interquartile range (IQR); garis di dalam kotak adalah median; whisker (antena) membentang dari tepi kotak ke observasi terjauh yang bukan outlier; observasi di luar batas itu digambar sebagai penanda terpisah. Batas outliernya: Q1 − 1.5 × IQR dan Q3 + 1.5 × IQR.
| Komponen | Makna statistik |
|---|---|
| Garis tengah kotak (merah) | median — 50% data di bawahnya |
| Tepi bawah kotak | Q1 — 25% data di bawahnya |
| Tepi atas kotak | Q3 — 75% data di bawahnya |
| Tinggi kotak | IQR — 50% data di tengah |
| Ujung whisker | observasi terjauh di dalam batas 1.5 × IQR |
Penanda + di luar whisker | outlier kandidat |
Perbandingan antar kotak terbaca dari tiga hal: posisi garis median (pusat), tinggi kotak (sebaran), dan panjang whisker yang tak seimbang (kemiringan). Kota dengan kotak pendek punya suhu yang stabil; kotak dengan whisker atas panjang menandakan hari-hari ekstrem panas.
boxplot: Fungsi Klasik Statistics Toolbox #
Aturannya: boxplot(x) menggambar satu kotak per kolom matriks x, dan boxplot(y, g) menggambar satu kotak per grup yang dibentuk variabel pengelompokan g. Mekanismenya: fungsi menghitung kuartil tiap grup, menggambar whisker hingga observasi non-outlier terjauh, dan memberi penanda + pada outlier — definisi persis seperti tabel di atas (default 1.5 × IQR).
% MATLAB dengan Statistics and Machine Learning Toolbox
suhuKota = [28 27 29 31 30 28 27; % baris = kota
25 26 24 27 28 26 25;
31 33 35 34 36 38 45];
boxplot(suhuKota'); % kolom = kota -> satu kotak per kotaKode tersebut menghasilkan tiga kotak pada posisi 1–3; nilai 45 di Kota C tampil sebagai penanda + di atas whisker. Bentuk bergrupnya lebih sering dipakai pada data panjang (long format): boxplot(nilai, kota) dengan nilai vektor pengukuran dan kota vektor label grup dengan panjang yang sama.
boxchart: Alternatif Inti MATLAB (R2020a+) #
Aturannya: boxchart(ydata) menggambar box chart dari tiap kolom matriks, dan boxchart(xgroupdata, ydata) memposisikan tiap kotak pada nilai xgroupdata — nilai yang sama dikelompokkan menjadi satu kotak. Mekanismenya sama dengan boxplot (median, kuartil, whisker 1.5 × IQR, outlier), tetapi boxchart mengembalikan objek BoxChart yang bisa dimodifikasi, dan fungsi ini berada di MATLAB inti sejak R2020a — tidak perlu toolbox.
% MATLAB R2020a ke atas, tanpa toolbox
kota = [1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3]';
nilai = suhuKota(:); % 21 pengukuran dalam satu vektor
boxchart(kota, nilai);
set(gca, 'XTick', 1:3, 'XTickLabel', {'A', 'B', 'C'});Kode tersebut menghasilkan tiga kotak di posisi 1–3 dari data vektor panjang — bentuk input yang cocok dengan data nyata yang datang sebagai kolom (pengukuran, grup). Seperti boxplot, fungsi ini juga tidak tersedia di Octave (uji exist('boxchart') mengembalikan 0), sehingga dua contoh di atas ditulis mengikuti dokumentasi resmi tanpa blok output.
Padanan Manual dengan quantile #
Ketika boxplot dan boxchart tidak tersedia, kelima angka box plot tetap bisa kita hitung sendiri dengan quantile (MATLAB inti sejak R2022a, tersedia di Octave) lalu digambar dengan primitif grafik: fill untuk kotak, line untuk median dan whisker, plot untuk outlier. Inilah pendekatan yang teruji di course ini:
suhuKota = [28 27 29 31 30 28 27; % Kota A: 7 hari
25 26 24 27 28 26 25; % Kota B
31 33 35 34 36 38 45]; % Kota C: 45 = outlier
kota = {'A' 'B' 'C'};
nKota = numel(kota);
f = figure('visible', 'off');
hold on;
for k = 1:nKota
x = suhuKota(k, :);
q = quantile(x, [0.25 0.5 0.75]); % Q1, median, Q3
q1 = q(1); q2 = q(2); q3 = q(3);
iqr = q3 - q1;
lo = q1 - 1.5 * iqr; % batas bawah outlier
hi = q3 + 1.5 * iqr; % batas atas outlier
wl = min(x(x >= lo)); % ujung whisker bawah (data)
wu = max(x(x <= hi)); % ujung whisker atas (data)
outliers = x(x < lo | x > hi);
w = 0.3; % setengah lebar kotak
fill([k-w k+w k+w k-w], [q1 q1 q3 q3], [0.8 0.85 0.95], 'EdgeColor', 'k');
line([k-w k+w], [q2 q2], 'Color', 'r', 'LineWidth', 2); % median
line([k k], [q1 wl], 'Color', 'k'); % whisker bawah
line([k k], [q3 wu], 'Color', 'k'); % whisker atas
if ~isempty(outliers)
plot(k * ones(size(outliers)), outliers, 'r+', 'LineWidth', 1.5);
end
fprintf('%s: Q1=%g med=%g Q3=%g whisker=%g-%g outlier=%d\n', ...
kota{k}, q1, q2, q3, wl, wu, numel(outliers));
end
hold off;
set(gca, 'XTick', 1:nKota, 'XTickLabel', kota);
xlabel('Kota');
ylabel('Suhu (C)');
title('Distribusi suhu per kota (box plot manual)');
saveas(f, 'box-suhu-kota.png');
fprintf('Grafik tersimpan: box-suhu-kota.png\n');
delete(f);Output yang Dihasilkan:
A: Q1=27.25 med=28 Q3=29.75 whisker=27-31 outlier=0
B: Q1=25 med=26 Q3=26.75 whisker=24-28 outlier=0
C: Q1=33.25 med=35 Q3=37.5 whisker=31-38 outlier=1
Grafik tersimpan: box-suhu-kota.pngGrafik yang tersimpan: tiga kotak — Kota A dan B terlihat rendah dan rapat, Kota C lebih tinggi dengan satu penanda + di nilai 45. Mari kita bedah baris-baris kode di atas:
- Baris 11 (
q = quantile(x, [0.25 0.5 0.75])): tiga kuartil sekaligus untuk kota ke-k;quantilemenginterpolasi linear pada data terurut. - Baris 14-15 (
lo,hi): batas pencilan klasik Q1 − 1.5×IQR dan Q3 + 1.5×IQR — angka 1.5 inilah default yang dipakaiboxplotmaupunboxchart. - Baris 16-17 (
wl,wu): ujung whisker harus observasi data nyata —min/maxdengan mask logisx(x >= lo)memilih kandidatnya. - Baris 21 (
fill(...)): kotak digambar sebagai poligon 4 titik (x kiri, x kanan, x kanan, x kiri) dengan warna RGB[0.8 0.85 0.95]. - Baris 26 (
plot(..., 'r+')): outlier digambar sebagai penanda plus merah pada koordinat x grupnya —k * ones(size(outliers))menaruh semua outlier di satu kolom.
Ringkasan #
Box plot memampatkan sebaran menjadi median, kotak IQR, whisker 1.5 × IQR, dan penanda outlier, sehingga perbandingan antar grup terbaca dari posisi dan tinggi kotak. boxplot menghitung semuanya otomatis tetapi membutuhkan Statistics Toolbox, boxchart (R2020a+) menghilangkan kebutuhan toolbox, dan padanan manual quantile + fill/line menjaga contoh course tetap teruji di Octave. Sebelum naik ke dimensi ketiga, ada satu pertanyaan visual yang belum terjawab: bagian-dari-keseluruhan — dijawab oleh pie chart.