Dasar plot

Menggambar garis 2D dengan plot beserta gaya garis, penanda, dan warna.

Daftar isi

Fungsi plot menggambar kurva dua dimensi dengan menempatkan pasangan nilai (x, y) sebagai titik pada bidang lalu menghubungkannya menjadi garis. Topik ini membahas mekanisme panggilan plot, penulisan triplet gaya yang mengatur warna, jenis garis, dan penanda, penggabungan beberapa pasang data dalam satu panggilan, serta pembatasan daerah pandang sumbu dengan xlim, ylim, dan axis. Penguasaan materi ini menjadi dasar bagi hampir semua diagram MATLAB karena bentuk lain seperti diagram batang dan permukaan dibangun di atas konvensi yang sama.

Kurva pertama dengan plot#

Panggilan paling sederhana berbentuk plot(x, y) dengan x dan y dua vektor berpanjang sama. Fungsi plot menempatkan tiap pasangan (xk,yk)(x_k, y_k) sebagai satu titik pada bidang, lalu menghubungkan titik-titik itu dengan ruas garis berurutan, sehingga kerapatan titik menentukan halusnya kurva. Vektor y dihitung sekaligus oleh fungsi elementer karena operasi seperti sin bekerja per elemen pada array. Skrip berikut menggambar satu kurva sinus pada rentang 00 sampai 2π2\pi dengan 100 titik.

matlab kurva-sinus.m
% kurva-sinus.m: menggambar kurva sinus dua dimensi dengan plot
x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y, 'b-');
print('-dsvg', 'kurva-sinus.svg');

Hasil eksekusi skrip itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2-1-0.500.5101234567gnuplot_plot_1a
Kurva sinus pada rentang 0 sampai 2 kali pi

Sebuah figur memuat bagian-bagian baku yang perlu dikenali sebelum dekorasi dibahas. Kotak gambar dengan latar putih disebut sumbu (axes) dan menampung kurva. Angka pada tepi sumbu, misalnya 0 sampai 7 pada sumbu horizontal dan -1 sampai 1 pada sumbu vertikal, disebut tick dan berfungsi sebagai skala pembacaan nilai. Garis biru padat adalah data itu sendiri.

Batas sumbu pada figur di atas dipilih otomatis dari rentang data, kemudian dibulatkan agar jarak antar tick rapi. Pengaturan batas ini dapat diambil alih secara manual dan dibahas pada bagian batas sumbu.

Beberapa pasangan data dalam satu panggilan#

Satu panggilan plot menerima beberapa pasang data sekaligus dengan bentuk plot(x1, y1, gaya1, x2, y2, gaya2, ...). Setiap pasang digambar pada sumbu yang sama sehingga beberapa kurva dapat dibandingkan langsung tanpa perintah tambahan. String gaya pada tiap pasang bersifat opsional. Apabila string itu dihilangkan, warna dipilih otomatis secara bergilir dari urutan warna bawaan, sehingga dua kurva tanpa gaya tetap dapat dibedakan warnanya. Skrip berikut menggambar empat kurva dengan empat string gaya berbeda dalam satu panggilan.

matlab gaya-garis.m
% gaya-garis.m: membandingkan empat gaya garis dalam satu panggilan plot
x = linspace(0, 2*pi, 200);
plot(x, sin(x), 'b-', x, cos(x), 'r--', x, sin(2*x)/2, 'g:', x, cos(2*x)/2, 'k-.');
print('-dsvg', 'gaya-garis.svg');

Keempat kurva hasil skrip itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2-1-0.500.5101234567gnuplot_plot_1agnuplot_plot_2agnuplot_plot_3agnuplot_plot_4a
Empat kurva dengan gaya garis biru padat, merah putus-putus, hijau bertitik, dan hitam garis-titik

Kurva biru padat adalah sin⁡(x)\sin(x), kurva merah putus-putus adalah cos⁡(x)\cos(x), kurva hijau bertitik adalah sin⁡(2x)/2\sin(2x)/2, dan kurva hitam garis-titik adalah cos⁡(2x)/2\cos(2x)/2. Perbedaan gaya garis membuat kurva yang saling berpotongan tetap terlacak oleh mata meskipun warnanya mirip pada cetakan hitam putih. Kebiasaan yang baik pada figur teknis adalah memakai kombinasi gaya garis dan warna sekaligus, bukan warna saja, karena sebagian pembaca figur sulit membedakan warna.

Triplet gaya: warna, gaya garis, dan penanda#

Tampilan sebuah kurva diatur oleh satu string pendek yang menggabungkan kode warna, kode gaya garis, dan kode penanda (marker). Ketiganya ditulis tanpa pemisah dan urutannya bebas, misalnya 'b-' berarti garis biru padat tanpa penanda. Kode yang tersedia dirangkum pada tabel berikut.

BagianKode dan artinya
Warnab biru, g hijau, r merah, c cyan, m magenta, y kuning, k hitam, w putih
Gaya garis- padat, -- putus-putus, : bertitik, -. garis-titik
Penandao lingkaran, + plus, ^ segitiga, s kotak, d wajik, x silang, * bintang

Gabungan lengkap seperti 'b-o' menghasilkan garis biru padat dengan penanda lingkaran pada tiap titik data. Penanda paling bermanfaat ketika jumlah titik sedikit, misalnya tujuh pengukuran harian, karena tiap titik pengukuran terlihat sebagai lingkaran, plus, atau segitiga. Skrip berikut memakai tiga bentuk penanda untuk tiga ruangan pada data suhu mingguan.

matlab penanda-data.m
% penanda-data.m: tiga bentuk penanda pada data suhu harian
hari = 0:6;
ruangA = [24.0 25.1 26.4 26.8 25.9 24.6 23.8];
ruangB = [22.4 23.0 24.2 24.9 24.1 22.9 22.0];
ruangC = [20.8 21.2 22.0 22.6 21.8 20.9 20.2];
plot(hari, ruangA, 'bo', hari, ruangB, 'r+', hari, ruangC, 'g^');
print('-dsvg', 'penanda-data.svg');

Titik-titik data dari ketiga ruangan itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 220212223242526270123456gnuplot_plot_1agnuplot_plot_2agnuplot_plot_3a
Tiga seri suhu harian dengan penanda lingkaran, plus, dan segitiga

Tanpa kode gaya garis, hanya penanda yang digambar sehingga seri data tampak sebagai kumpulan simbol, bukan kurva. Bentuk ini cocok untuk data diskret yang tidak punya makna di antara titiknya. Pada data kontinu yang rapat, penanda tanpa garis justru membuat simbol saling menumpuk. Kurva semacam itu cukup digambar dengan garis saja, atau dengan garis beserta penanda yang hanya muncul pada sebagian titik.

Penanda pada data rapat#

Kurva hasil pengukuran sering memuat ratusan titik sehingga penanda pada tiap titik saling menutup dan garis menjadi tebal semu. MATLAB menyediakan properti MarkerIndices untuk menggambar penanda hanya pada indeks tertentu, misalnya setiap titik ke-12. Properti itu belum tersedia pada GNU Octave yang dipakai untuk memverifikasi contoh pada jalur ini, sehingga bentuknya ditampilkan tanpa dieksekusi.

matlab MATLAB: penanda setiap titik ke-12 dengan MarkerIndices
% tidak-dijalankan
% MATLAB modern: batasi penanda pada indeks tertentu dengan MarkerIndices
waktu = 0:0.25:12;
suhu = 24 + 5*sin(waktu/3);
plot(waktu, suhu, 'b-', 'MarkerIndices', 1:12:numel(waktu));

Pola yang berjalan di kedua implementasi adalah menggambar dua pasang data dalam satu panggilan, yakni kurva penuh dengan gaya garis saja, lalu irisan data jarang dengan gaya penanda saja. Irisan waktu(1:12:end) mengambil setiap titik ke-12 sehingga penanda berjarak tiga jam pada data per seperempat jam. Skrip berikut memakai pola itu.

matlab penanda-tiap-n.m
% penanda-tiap-n.m: penanda pada setiap titik ke-12 dari kurva rapat
waktu = 0:0.25:12;
suhu = 24 + 5*sin(waktu/3);
plot(waktu, suhu, 'b-', waktu(1:12:end), suhu(1:12:end), 'ro');
print('-dsvg', 'penanda-tiap-n.svg');

Kurva lengkap dengan lima penanda merah hasil skrip itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2202224262830024681012gnuplot_plot_1agnuplot_plot_2a
Kurva suhu rapat dengan penanda merah pada setiap titik ke-12

Batas sumbu dengan xlim, ylim, dan axis#

Batas sumbu otomatis kadang memuat daerah kosong yang melebar atau memotong bagian data yang ingin ditekankan. Perintah xlim([a, b]) dan ylim([c, d]) mengganti batas sumbu horizontal dan vertikal secara terpisah, sedangkan axis([a, b, c, d]) mengatur keempat batas dalam satu perintah. Skrip berikut mempersempit pandangan kurva sinus ke setengah periode tengah.

matlab batas-sumbu.m
% batas-sumbu.m: membatasi daerah pandang dengan xlim dan ylim
x = linspace(0, 2*pi, 200);
y = sin(x);
plot(x, y, 'b-');
xlim([pi/2, 3*pi/2]);
ylim([-1.25, 1.25]);
print('-dsvg', 'batas-sumbu.svg');

Hasil pembatasan itu tampak pada figur berikut.

GnuplotProduced by GNUPLOT 6.0 patchlevel 2-1-0.500.5122.533.544.5gnuplot_plot_1a
Kurva sinus yang dipandang hanya pada rentang pi per dua sampai tiga pi per dua

Dua bentuk pengaturan batas berikut ini melengkapi xlim dan ylim.

matlab Bentuk ringkas axis dan perapatan batas
axis([pi/2 3*pi/2 -1.25 1.25]);  % satu perintah, empat batas
axis tight;                       % rapatkan batas ke rentang data

Perintah axis tight merapatkan batas sampai persis ke nilai terkecil dan terbesar data, berguna ketika daerah kosong pada batas otomatis mengesankan skala yang salah. Batas manual dipakai justru untuk kebalikannya, yaitu memberi ruang kosong agar kurva atau anotasi tidak menempel pada tepi sumbu. Keduanya mengubah figur yang sedang aktif sehingga urutannya selalu setelah panggilan plot.

Kesalahan umum#

  • Kedua vektor berpanjang berbeda. Fungsi plot menolak pasangan x dan y yang jumlah elemennya tidak sama karena tiap titik membutuhkan satu nilai pada tiap sumbu. Kondisi ini lazim muncul ketika rentang x diperpanjang atau diubah tanpa menghitung ulang y.
matlab Pasangan vektor yang berpanjang berbeda
x = linspace(0, 1, 5);
y = [1 2 3 4];
try
  plot(x, y);
catch e
  disp(e.message)
end
text Keluaran
__plt2vv__: vector lengths must match
  • Menulis plot(y) dan mengira sumbu horizontalnya bernilai data. Tanpa argumen x, fungsi plot memakai nomor indeks 1 sampai n sebagai nilai horizontal. Hasilnya benar secara sintaks tetapi salah secara makna ketika pembaca mengharapkan skala waktu atau sudut. Selalu tuliskan kedua argumen kecuali nomor indeks memang dimaksudkan.
  • Menukar urutan plot(y, x). Perintah ini sah dan menghasilkan figur yang tampak wajar, tetapi kedua sumbu tertukar sehingga pembacaan nilai ikut salah. Kebiasaan pencegahannya adalah membaca pasangan sebagai horizontal dulu, vertikal kemudian, sama seperti penulisan koordinat (x, y).

Ringkasan#

  • Panggilan plot(x, y) menghubungkan titik-titik (xk,yk)(x_k, y_k) menjadi garis pada satu sumbu, dengan syarat kedua vektor berpanjang sama.
  • Satu panggilan plot menerima beberapa pasang data, dan string gaya pada tiap pasang mengatur gabungan warna, gaya garis, dan penanda seperti 'b-', 'r--', atau 'b-o'.
  • Penanda pada data rapat dikendalikan dengan MarkerIndices pada MATLAB, sedangkan pola lintas implementasi menggambar kurva penuh bersama irisan data jarang dalam satu panggilan.
  • Batas sumbu diatur dengan xlim, ylim, axis, dan axis tight setelah kurva digambar.

Referensi#