Dekorasi figur

Melengkapi grafik dengan title, xlabel, ylabel, legend, dan grid.

Daftar isi

Figur hasil plot baru memuat kurva dan skala tanpa keterangan apa pun, sehingga maknanya hanya terbaca oleh pembuatnya. Topik ini membahas pemasangan judul dengan title, label sumbu dengan xlabel dan ylabel, legenda dengan legend, garis bantu dengan grid, pengaturan tick dengan xticks dan yticks, notasi matematika pada label, serta pengaturan properti sumbu melalui set. Setelah topik ini, figur yang dihasilkan membawa keterangan lengkapnya sendiri dan dapat dibaca oleh pembaca yang tidak menyaksikan proses pembuatannya.

Judul, label sumbu, dan grid#

Perintah title('teks') memasang judul di bagian atas sumbu aktif, sedangkan xlabel dan ylabel memasang keterangan pada sumbu horizontal dan vertikal. Perintah grid on menampilkan garis bantu yang memanjang dari tiap tick, dan grid off menyembunyikannya kembali. Seluruh perintah dekorasi bekerja pada sumbu aktif, yaitu sumbu yang menjadi sasaran panggilan gambar terakhir, sehingga urutan penulisan yang aman adalah menggambar kurva lebih dahulu baru memasang keterangan.

matlab judul-dan-label.m
% judul-dan-label.m: judul, label sumbu, dan grid pada kurva suhu
jam = 0:0.5:12;
suhu = 24 + 4*sin(jam/2);
plot(jam, suhu, 'b-');
title('Suhu ruang server selama satu hari');
xlabel('Jam ke-');
ylabel('Suhu (derajat Celsius)');
grid on;
print('-dsvg', 'judul-dan-label.svg');

Figur lengkap dengan judul, label kedua sumbu, dan grid hasil skrip itu tampak sebagai berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 22022242628024681012gnuplot_plot_1aSuhu (derajat Celsius)Jam ke-Suhu ruang server selama satu hari
Kurva suhu dengan judul, label sumbu, dan grid

Tiga keterangan itu memikul tugas yang berbeda. Judul menyatakan pokok bahasan figur dan menjadi teks pertama yang dibaca. Label sumbu menyatakan besaran beserta satuannya, dan tanpanya angka pada tick menjadi tak bermakna. Garis grid memudahkan pelacakan nilai dari kurva ke sumbu, tetapi pada figur berisi banyak kurva grid yang rapat justru menambah derau sehingga lebih baik dipakai seperlunya.

Legenda dan penempatannya#

Legenda menerangkan identitas tiap kurva ketika satu sumbu memuat beberapa kurva. Panggilan legend('nama1', 'nama2', ...) memasang kotak keterangan yang urutannya mengikuti urutan penggambaran kurva, sehingga nama pertama milik kurva yang digambar lebih dulu. Tanpa legenda, pembaca harus menebak kurva mana milik data mana, dan sering menebak salah. Argumen 'location' mengatur penempatan kotaknya dengan kata kunci seperti 'northwest', 'southeast', atau 'northeast' sesuai pojok sumbu.

matlab legenda-figur.m
% legenda-figur.m: legenda dua kurva dengan pengaturan letak
jam = 0:0.5:12;
ruangServer = 24 + 4*sin(jam/2);
ruangArsip = 21 + 3*sin(jam/2 - 1);
plot(jam, ruangServer, 'b-', jam, ruangArsip, 'r--');
title('Suhu dua ruangan selama satu hari');
xlabel('Jam ke-');
ylabel('Suhu (derajat Celsius)');
legend('Ruang server', 'Ruang arsip', 'location', 'northwest');
grid on;
set(gca, 'FontSize', 11);
print('-dsvg', 'legenda-figur.svg');

Legenda pada pojok kiri atas hasil skrip itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2182022242628024681012Ruang serverRuang serverRuang arsipRuang arsipSuhu (derajat Celsius)Jam ke-Suhu dua ruangan selama satu hari
Dua kurva suhu dengan legenda di pojok kiri atas

Skrip di atas sekaligus memperkenalkan set(gca, ...). Fungsi gca mengembalikan sumbu aktif, dan set mengubah propertinya, misalnya 'FontSize', 11 memperbesar seluruh tulisan pada sumbu dalam satu perintah. Pengaturan semacam ini lebih ringkas daripada mengatur tiap judul dan label satu per satu karena satu panggilan mengenai semua teks pada sumbu. Penempatan legenda sebaiknya menghindari daerah yang dilewati kurva, dan lokasi pojok memberi ruang kosong yang paling sering tersedia.

Penanda skala dengan xticks dan yticks#

Posisi tick dipilih otomatis dari rentang data, dan hasil otomatis itu kadang terlalu rapat atau memuat nilai yang tidak bermakna bagi data. Perintah xticks(v) dan yticks(v) mengganti posisi tick dengan vektor nilai v buatan sendiri, misalnya xticks(0:2:10) untuk tick genap saja. Garis grid ikut berpindah mengikuti tick baru sehingga keduanya diatur bersama. Skrip berikut memakai tick yang lebih renggang pada getaran teredam.

matlab ticks-kustom.m
% ticks-kustom.m: penanda skala kustom dengan xticks dan yticks
x = linspace(0, 10, 200);
y = exp(-0.25*x) .* sin(2*x);
plot(x, y, 'b-');
title('Getaran teredam');
xlabel('Waktu (detik)');
ylabel('Amplitudo');
xticks(0:2:10);
yticks(-0.8:0.4:0.8);
grid on;
print('-dsvg', 'ticks-kustom.svg');

Figur dengan tick hasil pengaturan manual itu tampak sebagai berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2-0.400.40.80246810gnuplot_plot_1aAmplitudoWaktu (detik)Getaran teredam
Getaran teredam dengan tick renggang pada kedua sumbu

Pengaturan manual paling berguna pada dua keadaan. Pertama, data memiliki nilai patokan yang ingin selalu tampak, misalnya tick pada kelipatan π\pi untuk sudut atau kelipatan satu untuk jam. Kedua, tick otomatis terlalu rapat sehingga angka saling bertabrakan, dan perenggangan seperti di atas membuat skala lebih mudah dibaca. Kebalikannya juga berlaku, yaitu tick yang terlalu jarang membuat pembacaan nilai menjadi kasar, sehingga vektor tick dipilih dengan memperhatikan kerapatan data.

Notasi matematika pada label#

Label menerima notasi bergaya TeX sehingga rumus ringkas dapat ditulis langsung pada judul dan label tanpa menyusun teks panjang. Notasi yang paling sering dipakai adalah huruf Yunani seperti \pi dan \omega, pangkat dengan ^, dan indeks dengan _. MATLAB menafsirkan string label dengan penerjemah TeX bawaan secara default. Contoh pada jalur ini diverifikasi dengan GNU Octave. Penerjemah TeX pada lingkungan itu juga merender huruf Yunani, indeks, dan pangkat sederhana, sehingga notasi berikut tampil sebagai simbol pada figur hasilnya.

matlab label-tex.m
% label-tex.m: notasi matematika sederhana pada judul dan label
x = linspace(0, 4*pi, 200);
amplitudo = exp(-x/8);
plot(x, amplitudo .* sin(x), 'b-', x, amplitudo .* cos(x), 'r--');
title('Osilasi teredam sampai t = 4\pi');
xlabel('Waktu t (detik)');
ylabel('Amplitudo e^{-t/8}');
legend('e^{-t/8} sin(t)', 'e^{-t/8} cos(t)', 'location', 'northeast');
grid on;
print('-dsvg', 'label-tex.svg');

Judul, label, dan legenda bertuliskan notasi hasil skrip itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2-1-0.500.5102468101214e-t/8 sin(t)e-t/8sin(t)e-t/8 cos(t)e-t/8cos(t)Amplitudo e-t/8Waktu t (detik)Osilasi teredam sampai t = 4π
Osilasi teredam dengan notasi matematika pada judul, label, dan legenda

Properti bawaan untuk seluruh sesi#

Pengaturan seperti ukuran huruf dapat dinaikkan dari satu figur menjadi bawaan seluruh figur pada satu sesi. Panggilan set(0, ...) pada objek akar mengubah nilai bawaan properti, dan setiap figur yang dibuat sesudahnya mewarisi nilai itu tanpa perlu diatur ulang. Nama propertinya diawali kata Default, dan pola yang sama berlaku untuk keluarga objek lain, misalnya DefaultLineLineWidth untuk ketebalan garis bawaan pada kurva baru.

matlab Nilai bawaan ukuran huruf untuk seluruh sesi
set(0, 'DefaultAxesFontSize', 12);  % berlaku pada figur yang dibuat sesudahnya

Nilai bawaan sesi hilang ketika sesi ditutup, dan figur yang sudah terbuka tidak ikut berubah karena nilai bawaan hanya dibaca ketika objek dibuat. Pada MATLAB, pengaturan yang ingin dipakai terus-menerus ditulis pada berkas startup.m yang dijalankan otomatis saat sesi dimulai, sedangkan pada Octave perannya dipegang oleh berkas .octaverc. Kedua mekanisme itu hanya memuat perintah set yang sama sehingga pilihan penempatannya tidak mengubah perilaku figur.

Kesalahan umum#

  • Dekorasi terpasang sebelum kurva terakhir. Setiap panggilan plot pada keadaan hold off mengganti isi sumbu sekaligus menghapus judul dan label yang terpasang, karena dekorasi melekat pada sumbu, bukan pada figur. Pasang seluruh keterangan setelah panggilan gambar terakhir. Kondisi setelah plot ulang dapat diperiksa langsung seperti berikut.
matlab Judul yang hilang setelah plot ulang
x = linspace(0, 2*pi, 40);
plot(x, sin(x), 'b-');
title('Suhu harian');
plot(x, cos(x), 'r--');
judul = get(get(gca, 'Title'), 'String');
fprintf('judul setelah plot ulang: "%s"\n', judul);
text Keluaran
judul setelah plot ulang: ""
  • Menukar xlabel dan ylabel. Kedua perintah sama-sama sah sehingga kekeliruan tidak memicu error, tetapi keterangan horizontal terpasang pada sumbu vertikal atau sebaliknya. Pembenahannya sederhana, yaitu membaca nama fungsinya sebagai arah: xlabel untuk sumbu datar, ylabel untuk sumbu tegak.
  • Urutan legenda tidak mengikuti urutan kurva. Legenda menerima nama dalam urutan bebas, sedangkan penempatannya mengikuti urutan penggambaran. Nama yang tertukar menghasilkan legenda yang meyakinkan tetapi salah, dan kesalahan semacam ini hanya tertangkap dengan membaca ulang pasangan nama dan kurva.

Ringkasan#

  • Judul, label sumbu, dan grid dipasang dengan title, xlabel, ylabel, dan grid on pada sumbu aktif, dan semuanya terhapus bila plot menggambar ulang sumbu.
  • Legenda mengikuti urutan penggambaran kurva, dengan penempatan melalui argumen 'location'.
  • Posisi tick diganti dengan xticks dan yticks, dan garis grid mengikuti tick yang baru.
  • Label menerima notasi TeX sederhana seperti \pi, pangkat, dan indeks, dengan cakupan penerjemah yang berbeda antar implementasi.
  • Properti satu sumbu diatur melalui set(gca, ...), sedangkan bawaan seluruh sesi diatur melalui set(0, ...) dan dapat dibuat permanen lewat berkas startup.

Referensi#