7-3 HROCi洇峈顗漫宒s

我們也可以使用指令列的方式來改變一個圖形的各種性質,最常用到的是 set 與 get 指令,其中 set 指令可用來設定某個性質的值,而 get 指令則用來於取得某個性質的值。(事實上所有以GUI介面來進行圖形修改的工具,也都是使用這兩個指令來完成。)

在下列範例中,我們先產生一條曲線,再使用 set 指令來修改此曲線的各種性質,如下:

Example 1: 07-握把式圖形與GUI設計/hg02.mt = 0:0.1:4*pi; y = exp(-t/5).*sin(t); h = plot(t, y); % h 為曲線的握把 set(h, 'Linewidth', 3); % 將曲線寬度改為 3 set(h, 'Marker', 'o'); % 將曲線的線標改成小圓圈 set(h, 'MarkerSize', 20); % 將線標的大小改成 20

我們也可以將上述三個 set 指令合成一個指令:

set(h, 'LineWidth', 3, 'Marker', 'o', 'MarkerSize', 20);

也可以單獨使用 set(h) 來列出 h 所有可能的性質,例如:

Example 2: 07-握把式圖形與GUI設計/hgSet01.mh=plot(rand(1,10)); % h 為曲線的握把 fprintf('MATLAB version = %s\n', version); set(h) % 列出 h 的所有性質MATLAB version = 8.5.0.197613 (R2015a) AlignVertexCenters: {'on' 'off'} BusyAction: {'queue' 'cancel'} ButtonDownFcn: {} Children: {} Clipping: {'on' 'off'} Color: {1x0 cell} CreateFcn: {} DeleteFcn: {} DisplayName: {} HandleVisibility: {'on' 'callback' 'off'} HitTest: {'on' 'off'} Interruptible: {'on' 'off'} LineStyle: {'-' '--' ':' '-.' 'none'} LineWidth: {} Marker: {1x14 cell} MarkerEdgeColor: {'none' 'flat' 'auto'} MarkerFaceColor: {'none' 'flat' 'auto'} MarkerSize: {} Parent: {} PickableParts: {'visible' 'none' 'all'} Selected: {'on' 'off'} SelectionHighlight: {'on' 'off'} Tag: {} UIContextMenu: {} UserData: {} Visible: {'on' 'off'} XData: {} XDataMode: {'auto' 'manual'} XDataSource: {} YData: {} YDataSource: {} ZData: {} ZDataSource: {}

若欲取得某一個性質的值,可用 get 指令,例如,欲取得 h 的顏色,可輸入如下:

get(h, 'Color')

若要得知 h 的所有性質的值,可用 get(h),例如:

Example 3: 07-握把式圖形與GUI設計/hgGet01.mt=0:0.4:4*pi; h=plot(t, exp(-t/5).*sin(t)); % h 為曲線的握把 set(h, 'Marker', 'diamond', 'MarkerSize', 15, 'MarkerFaceColor', 'r'); % 將線標改成菱形、線標大小改成 15、線標的邊色改成紅色 fprintf('MATLAB version = %s\n', version); get(h) % 列出 h 的所有性質MATLAB version = 8.5.0.197613 (R2015a) AlignVertexCenters: 'off' Annotation: [1x1 matlab.graphics.eventdata.Annotation] BeingDeleted: 'off' BusyAction: 'queue' ButtonDownFcn: '' Children: [] Clipping: 'on' Color: [0 0.4470 0.7410] CreateFcn: '' DeleteFcn: '' DisplayName: '' HandleVisibility: 'on' HitTest: 'on' Interruptible: 'on' LineStyle: '-' LineWidth: 0.5000 Marker: 'diamond' MarkerEdgeColor: 'auto' MarkerFaceColor: [1 0 0] MarkerSize: 15 Parent: [1x1 Axes] PickableParts: 'visible' Selected: 'off' SelectionHighlight: 'on' Tag: '' Type: 'line' UIContextMenu: [] UserData: [] Visible: 'on' XData: [1x32 double] XDataMode: 'manual' XDataSource: '' YData: [1x32 double] YDataSource: '' ZData: [1x0 double] ZDataSource: ''

上述 get 和 set 可以通用於 MATLAB 各種版本,但是回傳的結果並不會完全一樣,因為隨著 MATLAB 版本的更新,每一個圖形物件的性質都會越來越多。(因此在上述範例中,我們特別印出執行此程式所用的 MATLAB 版本。)

一般而言,每一個圖形物件的性質都有數十種之多,但真正常用到的性質大概不到十種。

另一個常用到的指令是 findobj,為「find objects」的簡稱,此指令可在握把式圖形的階層式結構中,找出您要的物件。例如,欲找一個圖形視窗內的所有曲線物件,可仿造下列範例:

Example 4: 07-握把式圖形與GUI設計/findobj01.mplot(rand(10, 2)); % 畫出兩條曲線 h=findobj(0, 'type', 'line') % 找出曲線的握把 set(h, 'LineWidth', 3); % 經由握把將曲線寬度改為 3 h = 2x1 <a href="matlab:helpPopup matlab.graphics.chart.primitive.Line" style="font-weight:bold">Line</a> array: Line Line

在上例中第二個敘述中,「0」代表 MATLAB 桌面,因此上例的二、三列敘述的意義為「找出所有型態為 line 的物件,並將其曲線寬度改為 3」,傳回的向量 h 長度為 2,代表共找到兩個型態為 line 的物件。

Hint
在上述範例中,h(1) 和 h(2) 分別是兩條曲線的握把,但是它們的數值,只是用來代表此握把,本身並沒有大小或正負方面的任何與數字相關的意義。


MATLAB程式設計:入門篇