11/06/2006

9.4其他型式之繪圖指令

除上述繪圖參數之設定外,繪圖指令仍然要考慮到座標的刻度及置放型式,其所用之繪圖指令有另外的型式,雖然其參數值與plot()指令相同。表9.6所列之繪圖指令則可以符合類似的功能。茲分別說明如下:


表1.6 各種繪圖指令之功能








指令名稱指令敘述
plot(x,y)x 軸和 y 軸均為線性刻度(Linear Scale)
loglog(x,y)x 軸和 y 軸均為對數刻度(Logarithmic Scale)
semilogx(x,y)x 軸為對數刻度,y 軸為線性刻度
semilogy(x,y)x 軸為線性刻度,y 軸為對數刻度
plotyy(x,y)畫出兩個刻度不同的y 軸
newplot決定繪圖之所在
fplot函數繪圖


9.4.1 loglog(Y)繪圖指令


語法:

loglog(X1,Y1,...)
loglog(X1,Y1,LineSpec,...)
loglog(...,'PropertyName',PropertyValue,...)
h = loglog(...)


水平及垂直座標均改為對數座標,其內參數之設定則與plot()相同。程式Demo_12則是一個穀物風阻關係的例子。其中用到logspace這一個分段的函數,其功能與前述之linspace()相同,相異之處是其前面兩參數值之範圍為十之次方值,例如logspace(a,b),則是範圍為10a至10b的意思,其等分亦以10之次方間距為之。程式執行結果如圖9.22。


%Demo_12 log-log plot for grain resistance
a=2.57e4/9.795276;b=13.2; %水稻之阻力係數
Q = logspace(-1,2);
P=a*Q.^2./log(1+b*Q);
loglog(Q,P,'linewidth',4)
title('水稻阻力曲線');
xlabel('風量率,cmm/m^2');
ylabel('單位壓降, pa/m');
grid on






9.4.2 semilogx, semilogy 繪圖指令



語法:

semilogx(X1,Y1,...)
semilogx(X1,Y1,LineSpec,...)
semilogx(...,'PropertyName',PropertyValue,...)
h = semilogx(...)
semilogy(...)
h = semilogy(...)


這是單軸取對數之指令,其應用依情況而定。對數若為X軸則使用semilogx(),反之則使用semilogy()。下面例子為一聲音的等感曲線,可以用程式demo_13繪出。其結果如圖9.23。


%Demo_13 semilogx for noise level
x=[20 100 400 1000 3000 4000 10000];
y=[70 36 10 0 -5 -4 9];
semilogx(x,y,'linewidth',3)
title('最小可聽界限');
xlabel('周波數, Hz');
ylabel('音壓位準,dB');
grid on




9.4.3 plotyy繪圖指令


語法:

plotyy(X1,Y1,X2,Y2)
plotyy(X1,Y1,X2,Y2,'function')
plotyy(X1,Y1,X2,Y2,'function1','function2')
[AX,H1,H2] = plotyy(...)


plotyy 這個指令雖與plot功能大略相同,但可以將兩張完全不同刻度的圖合併在一起,形成左右兩個垂直座標,但共用一個X軸。在plotyy(X1,Y1,X2,Y2) 指令中,分別將X1與 Y1 之對應資料繪於左邊軸上,而將 X2 與 Y2 對應資料繪於右邊軸上。左右兩軸之刻度可以不同,由MATLAB決定,或由程式以指令設定之。

第二種情況是在兩組對應資料之後,加上所謂之函數名稱,function,這是用來指定兩造繪圖之方式,function1為左邊圖,function2為右邊圖,這些函數名稱可包括如前文所討論的 plot, semilogx, semilogy, loglog, stem 或其他 MATLAB 之函數指令。所以這兩組資料所繪製之形式並不一定要一樣。程式demo_14內容為綜合上述各種指令之參數型式。其結果則如圖9.24。

在指令 [AX,H1,H2] = plotyy(...)中,其前面有三組返回值。AX表示兩座標軸之握把,AX(1) 代表左邊座標,AX(2) 為右邊座標;另H1 與 H2則代表兩圖之握把。有這些握把之後,就可對兩座標軸設定名稱及其他需要之屬性;圖的部份也可以更改圖之線型及顏色。

%Demo_14 Two functions on one plot
x = 0:0.01:10;
y1 = 100*exp(-0.1*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[ax,h1,h2] = plotyy(x,y1,x,y2,'plot');
set(get(ax(1),'Ylabel'),'String','左側 y1 函數')
set(get(ax(2),'Ylabel'),'String','右側 y2 函數')
set(h1,'Linewidth',4)
set(h2,'LineStyle',':','color','k')
xlabel('時間 0-10 \mus')
title('指令plotyy之應用')