Kimi zaman tanım kümeleri aynı, fakat görüntü kümeleri bir hayli farklı olan fonksiyonları çizmek isteriz. Bunları ortak y eksenli aynı figüre çizersek aralarındaki farktan dolayı fonksiyonların ayrıntılarını göremeyiz. Örneğin bir tanesi 0 ile 0.1 arasında değişirken, diğer 90 ile 100 arasında değerler alabilir. Hal böyle olunca MATLAB bunları aynı y eksenine sığdırmak için limitleri 0 ile 100 arası gibi bir alandan seçer ve ayrıntıları seçemeyiz.

Bu problemi çözmek için MATLAB'de kullanacağımız fonksiyon plotyy. Hemen bir örnek yapalım. Önce örnek veri tanımlayalım ve çizimi yapalım:

Bir fonksiyona başka bir fonksiyonu parametre olarak vermek isterseniz fonksiyon tutucuları kullanabilirsiniz. Bu konuda önceden yazdığım şu yazıya bakabilirsiniz.
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[ax,h1,h2] = plotyy(x,y1,x,y2,'plot');

Sonra eksenleri isimlendirelim:

set(get(ax(1),'Ylabel'),'String','Yavaş düşüş')
set(get(ax(2),'Ylabel'),'String','Hızlı düşüş')

Son olarak da çizgilerin tipini değiştirelim:

set(h1,'LineStyle','--')
set(h2,'LineStyle',':')

Sonuç dokümantasyonda olduğu gibi:

Elde ettiğimiz y eksenleri farklı oldu.

Çubuk çizimine genelleme

Örnekteki çizimi plot fonksiyonu için yaptık. Gelin şimdi bu çözümü bar fonksiyonu için yapalım. Yine örnek veri tanımlayarak işe başlayalım:

x = [1 3.2 5 6.8 9]; 
y1 = [10 25 90 35 16]; 
y2 = [7 38 31 50 28];
[ax,h1,h2] = plotyy(x,y1,x,y2,'bar');

Dikkat ederseniz son parametreyi bar verdik.

Açıklamaları ve renkleri verelim:

set(get(ax(1),'Ylabel'),'String','Sol y  eksen açıklaması') 
set(get(ax(2),'Ylabel'),'String','Sağ y  eksen açıklaması')

set(h1,'FaceColor','r');
set(h1,'EdgeColor','w');

set(h2,'FaceColor','b');
set(h2,'EdgeColor','w');

xlabel('Zaman') 
title('Örnek çizim')

legend('1. veri','2. veri')

İki fonksiyon üst üste çizildiği için sonraki çizilen, öncekini örtecek. Bunu engellemek için ikinci çizimin genişliklerini küçültelim:

diff fonksiyonu girdi vektöründeki ardışık elemanların farklarını yeni bir vektör olarak döndürür. min(diff(x)) ile vektördeki elemanlar arasındaki en küçük aralık bulunabilir.
genislik = min(diff(x))/5; % genişlik
set(h2,'BarWidth',genislik);

Ve sonuç:

Peki, çizimin bu şekilde iç içe çizilmesini istemeseydik, yan yana çizilmesini isteseydik?..

Bu durumda, çizerken farklı tanım kümeleri kullanalım. İlk çizimi genislik kadar sola atıp, diğerini sağa atalım:

[ax, h1,h2] = plotyy(x-genislik,y1,x+genislik,y2,'bar');

Ve ardından iki çizimin de genişliğini aynı yapalım:

set(h1,'BarWidth',genislik);
set(h2,'BarWidth',genislik);

Böyle yapıp çizerseniz, x eksenindeki görülen değerler bizim asıl değerlerimiz değil. Bunları da güncelleyelim:

set(ax(1),'XTick',x)
set(ax(2),'XTick',x)

Ve sonuç gruplanmış çubuk çiziminin (grouped bar plot) iki farklı y eksenine ait hali oldu: