相关文章推荐
气势凌人的茶叶  ·  GsonAutoConfiguration ...·  1 年前    · 
会搭讪的领结  ·  javascript - While ...·  2 年前    · 
聪明伶俐的冰棍  ·  一则> ORA-00936: ...·  2 年前    · 

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

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

Example 1: 07-握把式圖形與GUI設計/hg02.m t = 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.m h=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: {}
 <p>若欲取得某一個性質的值,可用 get 指令,例如,欲取得 h 的顏色,可輸入如下:
 </p><center>get(h, 'Color')</center> 
 <p>若要得知 h 的所有性質的值,可用 get(h),例如:
 </p><p><a name="07-握把式圖形與GUI設計/hgGet01"/></p><fieldset><legend>Example 3: <a href="example/07-握把式圖形與GUI設計/hgGet01.m">07-握把式圖形與GUI設計/hgGet01.m</a></legend><xmp class="code">t=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: ''
 <p>上述 get 和 set 可以通用於 MATLAB 各種版本,但是回傳的結果並不會完全一樣,因為隨著 MATLAB 版本的更新,每一個圖形物件的性質都會越來越多。(因此在上述範例中,我們特別印出執行此程式所用的 MATLAB 版本。)
 </p><p>一般而言,每一個圖形物件的性質都有數十種之多,但真正常用到的性質大概不到十種。
 </p><p>另一個常用到的指令是 findobj,為「find objects」的簡稱,此指令可在握把式圖形的階層式結構中,找出您要的物件。例如,欲找一個圖形視窗內的所有曲線物件,可仿造下列範例:
 </p><p><a name="07-握把式圖形與GUI設計/findobj01"/></p><fieldset><legend>Example 4: <a href="example/07-握把式圖形與GUI設計/findobj01.m">07-握把式圖形與GUI設計/findobj01.m</a></legend><xmp class="code">plot(rand(10, 2)); % 畫出兩條曲線 
 h=findobj(0, 'type', 'line') % 找出曲線的握把 
 set(h, 'LineWidth', 3); % 經由握把將曲線寬度改為 3 
 2x1 <a href="matlab:helpPopup matlab.graphics.chart.primitive.Line" style="font-weight:bold">Line</a> array:
 <p>在上例中第二個敘述中,「0」代表 MATLAB 桌面,因此上例的二、三列敘述的意義為「找出所有型態為 line 的物件,並將其曲線寬度改為 3」,傳回的向量 h 長度為 2,代表共找到兩個型態為 line 的物件。
 </p><p/><fieldset><legend>Hint</legend><div class="hint">在上述範例中,h(1) 和 h(2) 分別是兩條曲線的握把,但是它們的數值,只是用來代表此握把,本身並沒有大小或正負方面的任何與數字相關的意義。</div></fieldset><p>