MATLAB memilih batas sumbu secara otomatis — dan pilihan otomatis itu sering menipu: padding menambah ruang kosong yang tak perlu, dua grafik dengan skala berbeda terlihat “sama besarnya”, dan lingkaran tampil sebagai oval. Momen lain, data membentang dari 0.0001 sampai 1 sehingga titik kecil menempel di lantai grafik. Kabar baiknya: seluruh perilaku sumbu dikendalikan dari satu tempat — properti axes. Cakupan chapter ini:
- Batas manual dengan
xlim,ylim, danaxis([...]) - Mode
axis equal,tight,square,auto,manual - Skala logaritmik:
semilogx,semilogy,loglog - Ticks khusus, label sumbu, arah sumbu terbalik, dan grid
Mengatur Batas Sumbu #
Aturannya: batas default dipilih MATLAB dengan margin kecil di sekeliling data. Mekanismenya: xlim([a b]) dan ylim([c d]) menulis langsung properti XLim/YLim pada axes aktif sekaligus membekukan modenya; axis([a b c d]) melakukannya sekaligus untuk kedua sumbu. Versi getter-nya membaca batas yang sedang berlaku:
xlim([0 12]); % sumbu-x 0 sampai 12
axis([0 12 -10 120]); % x dan y sekaligus: [x1 x2 y1 y2]
xl = xlim % membaca batas saat iniBatas manual berguna untuk perbandingan adil: dua panel bar-chart membandandingkan penjualan dua toko harus memakai batas-y yang sama, jika tidak toko dengan angka kecil terlihat “tumbuh” lebih dramatis.
Mode axis: equal, tight, square, auto, manual #
Perintah axis juga punya bentuk keyword yang mengubah cara MATLAB memetakan data ke piksel:
| Perintah | Efek | Kapan dipakai |
|---|---|---|
axis equal | satu unit data = jarak piksel yang sama di kedua sumbu | geometri: lingkaran bulat, peta |
axis square | kotak axes dibuat persegi | ruang simetris untuk equal |
axis tight | batas menempel tepat pada data | membuang padding |
axis auto | batas dihitung ulang otomatis | kembali ke perilaku default |
axis manual | batas saat ini dibekukan | menambah data baru tanpa rescale |
Mekanisme di balik axis equal: MATLAB menyetel properti DataAspectRatio menjadi [1 1 1] sehingga 1 unit pada sumbu-x tergambar sama panjang dengan 1 unit pada sumbu-y. Tanpa perintah ini, MATLAB hanya menjaga PlotBoxAspectRatio (rasio kotak) dan lingkaran plot(cos(t), sin(t)) tergambar oval.
Skala Logaritmik #
Aturannya: skala linear menyembunyikan data yang membentang beberapa orde besar. Data gain filter dari 1 sampai 0.0001 hanya akan tampak sebagai garis yang jatuh lalu menempel di nol. Mekanismenya: skala log menggeser posisi piksel mengikuti logaritma nilai — 0.0001, 0.001, 0.01, 0.1, 1 berjarak sama satu sama lain, dan jarak antar decade inilah yang membuat detail kecil terlihat.
Tiga fungsi menyediakannya langsung, dan semuanya kompatibel antara MATLAB maupun GNU Octave:
| Fungsi | Sumbu logaritmik | Contoh penggunaan |
|---|---|---|
semilogx(x, y) | hanya sumbu-x | respons frekuensi, eksponensial di x |
semilogy(x, y) | hanya sumbu-y | pertumbuhan populasi, degradasi error |
loglog(x, y) | kedua sumbu | hukum pangkat (y = ax^b tampak garis lurus) |
Alternatif non-fungsi: set(gca, 'XScale', 'log') mengubah skala pada grafik yang sudah jadi — berguna saat skala diputuskan belakangan.
Contoh Utuh: loglog dengan Ticks Khusus #
Skrip lengkap berikut dari contoh.m memplot respons lowpass dengan gain dari 1 turun ke 0.0001 — empat orde besar, wilayah wajib skala log:
f = logspace(0, 4, 200); % 1 Hz .. 10.000 Hz
fc = 100; % frekuensi potong (Hz)
gain = 1 ./ (1 + (f/fc).^2); % respons lowpass orde 2
g1 = figure('visible', 'off');
loglog(f, gain, 'b-', 'LineWidth', 1.5);
grid on;
xlabel('Frekuensi f (Hz)');
ylabel('Gain |H(f)|');
title('Respons lowpass orde 2 (f_c = 100 Hz)');
% batas manual + ticks khusus
axis([1 10000 1e-4 1]);
set(gca, 'XTick', [1 10 100 1000 10000], ...
'XTickLabel', {'1', '10', '100', '1 kHz', '10 kHz'});
set(gca, 'YTick', [1e-4 1e-3 1e-2 1e-1 1]);
saveas(g1, 'loglog-custom-ticks.png');
fprintf('Grafik tersimpan: loglog-custom-ticks.png\n');
fprintf('XTick terpasang: %s\n', mat2str(get(gca, 'XTick')));
fprintf('Gain pada f = %-6g Hz: %.4f\n', f(1), gain(1));
fprintf('Gain pada f = %-6g Hz: %.4f\n', fc, 1/(1+(fc/fc).^2));
fprintf('Gain pada f = %-6g Hz: %.3e\n', f(end), gain(end));Output yang Dihasilkan:
Grafik tersimpan: loglog-custom-ticks.png
XTick terpasang: [1 10 100 1000 10000]
Gain pada f = 1 Hz: 0.9999
Gain pada f = 100 Hz: 0.5000
Gain pada f = 10000 Hz: 9.999e-05Mari kita bedah baris-baris kode di atas:
- Baris 1 (
logspace(0, 4, 200)): 200 titik berjarak logaritmik dari 10^0 sampai 10^4 — pemasangan alami untuk grafik log;linspacejustru menumpuk titik di dekat 1. - Baris 6 (
loglog(...)): kedua sumbu logaritmik; bentuk kurva 1/(1+(f/fc)^2) memunculkan “lutut” di sekitar f = 100 Hz yang di skala linear tidak terbaca. - Baris 13 (
axis([1 10000 1e-4 1])): batas manual memotong margin kosong dan menjadikan rentang tampil tepat empat decade di kedua sumbu. - Baris 14-16 (
set(gca, 'XTick', ..., 'XTickLabel', ...)): ticks dipatok pada 1, 10, 100, 1000, 10000; label dua yang terakhir ditulis1 kHzdan10 kHzsupaya sumbu tidak sesak angka. - Baris 19-23 (blok
fprintf): angka gain 0.9999 → 0.5 → 0.0001 membuktikan kenapa skala log wajib: pada skala linear, seluruh bagian setelah 100 Hz adalah garis menempel nol.
Ticks, Label Sumbu, dan Arah Sumbu #
XTick dan XTickLabel dipasang sebagai pasangan: XTick memilih POSISI, XTickLabel (cell array) memilih TEKS pada posisi itu. Versi fungsi modern xticks([...]) / xticklabels({...}) tersedia sejak MATLAB R2016b — dan Octave 10 juga mengimplementasikannya — namun bentuk set(gca, ...) tetap pilihan teraman lintas versi. Label kategori seperti nama kota dipasang dengan cara yang persis sama seperti contoh heatmap pada Chapter Styling Visualisasi.
Arah sumbu dibalik lewat properti XDir/YDir:
set(gca, 'XDir', 'reverse'); % sumbu-x berjalan kanan ke kiriPembalikan ini lazim pada data kedalaman (0 di atas, makin dalam makin turun) atau pada perbandingan berbasis ranking. Terakhir, grid on mengaktifkan garis bantu pada ticks — di grafik log, grid adalah bagian dari keterbacaan karena jarak antar decade tidak lagi seragam secara visual; grid off mematikannya, dan grid minor menambah garis di antara ticks utama.
Ringkasan #
xlim/ylim/axis([...]) menulis batas sumbu secara manual, sementara axis equal/tight/square/auto/manual mengubah cara MATLAB memetakan data ke piksel — equal wajib untuk geometri, manual wajib dijaga dengan hold on. Skala logaritmik lewat semilogx/semilogy/loglog atau set(gca,'XScale','log') menyelamatkan data beberapa orde besar. Ticks dikendalikan pasangan XTick/XTickLabel, arah sumbu oleh XDir. Setelah batas dan skala beres, penampilan akhir menunggu gaya: Chapter Styling Visualisasi.