Ortak x eksenli, farklı y eksenli veri çizimi
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:
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: