11/06/2006

9.9 繪圖應 用例

Legend之使用


許多情況必須自外部取資料,然後利用所得之資料進行繪圖。Matlab有一個內建示範檔案count.mat,其內含有三個交叉路口的交通流量。繪圖之主體程式如下述;在此程式中,使用到一個legend圖示新指令,此指令在於標示所繪之圖形。legend之語法如下:

LEGEND(string1,string2,string3, ...,Loc)

其中string1等依序為繪圖時所需標示之對應名稱,必須使用字串,最後之Loc則為標示欄置放之位置,可以為字串或數值,可為'North'、'South'、'East'、'West'或用數值1(東北角)、2(西北角)、3(西南角)、4(東南角)等方向。

%ex_01.m
% plot example
load count.dat
[m,n]=size(count);
% plotting the data count
tt=1:m;
plot(tt,count),
legend('Location 1','Location 2','Location 3',2);
xlabel('Time'),ylabel('Vehicle Count')




典型之三維圖


繪製典型之三維圖可能牽涉下面之步驟及相關指令:
  1. 準備資料:可以利用meshgrid函數設定網絡座標,並以之求z函數。使其具有完整的一套資料。在matlab中常用之peaks函數,可以產生不同點數網絡之資料。
    z = peaks(20)
  2. 選擇顯示繪圖窗及繪製位置:
    figure(1),
    subplot(1,2,2)
  3. 呼叫三維繪圖函數:
    h=mesh(z),
    h=surf(z)
  4. 設定圖譜及遮罩算術法;
    colormap hot/cool; shading interp; set(h, 'EdgeColor', 'k')
  5. 增加光源:
    light('position',[-2, 2, 20]
    lighting phong
    material([0.4, 0.6, 0.5, 30])
    set(h, 'FaceColor',[0.7 0.7 0], 'BackFaceLighting','lit')
  6. 設定觀視角度:
    view([30, 45])
    set(gca,'CameraViewAngleMode','Manual')
  7. 設定軸限及刻度:
    axis([5 20 5 40 -4 4])
    set(gca,'zTickLabel','Negative||positive')
  8. 設定縱寬比:
    set(gca,'PlotBoxAspectRatio',[3 3 1])
  9. 增添軸標、圖標及文字:
    xlabel('X-axis')
    ylabel('Y-axis')
    zlabel('Function Values')
    title('Peaks')
  10. 印圖:
    set(gcf,'PaperPositionMode','auto)


繪圖例一



% ex_04.m
[X,Y] = meshgrid([-2:0.1:2]);
Z = X.*exp(-X.^2-Y.^2);
plot3(X,Y,Z)



三維網絡圖及表面圖


除使用plot3繪製三維圖外,亦可使用mesh及surf指令產生三D圖。例如由兩自變數產生之三D圖,設z=f(x,y)=sin(R)/R,而R=sqrt(X.^2+Y.^2),則可利用meshgrid先產生網絡座標再計算z。即:

% ex_05.m
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
figure(1)
mesh(X,Y,Z);
figure(2)
surf(X,Y,Z,'FaceColor','interp',...
'EdgeColor','none',...
'FaceLighting','phong')
daspect([5 5 1])
axis tight
view(-50,30)
camlight left