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, dan axis([...])
  • 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:

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

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

PerintahEfekKapan dipakai
axis equalsatu unit data = jarak piksel yang sama di kedua sumbugeometri: lingkaran bulat, peta
axis squarekotak axes dibuat persegiruang simetris untuk equal
axis tightbatas menempel tepat pada datamembuang padding
axis autobatas dihitung ulang otomatiskembali ke perilaku default
axis manualbatas saat ini dibekukanmenambah 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:

FungsiSumbu logaritmikContoh penggunaan
semilogx(x, y)hanya sumbu-xrespons frekuensi, eksponensial di x
semilogy(x, y)hanya sumbu-ypertumbuhan populasi, degradasi error
loglog(x, y)kedua sumbuhukum 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:

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

text
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-05

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (logspace(0, 4, 200)): 200 titik berjarak logaritmik dari 10^0 sampai 10^4 — pemasangan alami untuk grafik log; linspace justru menumpuk titik di dekat 1.
  2. 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.
  3. Baris 13 (axis([1 10000 1e-4 1])): batas manual memotong margin kosong dan menjadikan rentang tampil tepat empat decade di kedua sumbu.
  4. Baris 14-16 (set(gca, 'XTick', ..., 'XTickLabel', ...)): ticks dipatok pada 1, 10, 100, 1000, 10000; label dua yang terakhir ditulis 1 kHz dan 10 kHz supaya sumbu tidak sesak angka.
  5. 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:

matlab
set(gca, 'XDir', 'reverse');   % sumbu-x berjalan kanan ke kiri

Pembalikan 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.