【科研經驗】如何快速上手MATLAB數據可視化(二)

快速上手MATLAB數據可視化(二)

【科研經驗】如何快速上手MATLAB數據可視化(二)的圖1

復雜繪圖技巧與實戰

【科研經驗】如何快速上手MATLAB數據可視化(二)的圖2

圖形的句柄操作和屬性設置



【科研經驗】如何快速上手MATLAB數據可視化(二)的圖3



01


導語



  

      在快速上手MATLAB數據可視化(一)中,我們主要介紹如何快速應用MATLAB常見的散點圖、二維圖三維圖、曲面圖基本函數進行繪圖,以及如何通過配色方案設置與手動設置標簽技巧達到高質量期刊圖像的可視化效果。


【科研經驗】如何快速上手MATLAB數據可視化(二)的圖4

      而相比于其他圖形界面化繪圖軟件,MATLAB最大的優勢在于可以通過腳本編程的方式對圖像界面的句柄和屬性進行高效率復雜操作。因此,本講主要介紹圖形繪制界面的句柄操作和屬性設置技巧,并通過一個具體復雜繪圖實例進行實戰。



02


圖形的句柄操作和屬性設置




什么是句柄與屬性 

      MATLAB圖形窗口由不同的對象(如坐標軸、曲線、曲面或文字等)組成圖形界面。MATLAB給每個圖形對象分配一個標識符,稱為句柄,給每個對象的每一個屬性分配一個名字,稱為屬性名,而屬性名的取值稱為屬性值。通過該句柄對該圖形對象的屬性進行設置,同時亦可獲取相關的屬性值,從而實現復雜的圖形繪制。

常用圖形對象的句柄函數 


gcf   

當前圖形的句柄 


fig = gcf

       返回當前圖形的句柄。如果圖形不存在,則 gcf 將創建一個圖形并返回其句柄??梢允褂脠D形句柄查詢和修改圖形的屬性。

【科研經驗】如何快速上手MATLAB數據可視化(二)的圖5

surf(peaks)fig = gcf; 

% 獲取當前圖形句柄

fig.Color = [0 0.5 0.5];

% 設置背景顏色

fig.ToolBar = 'none';

% 取消工具欄顯示


gca   

當前坐標軸或圖句柄


ax = gca

       返回當前圖形的當前坐標軸或圖,這通常是最后創建的圖形或用鼠標點擊的最后一個圖形。圖形函數(例如 title)的目標為當前坐標軸或圖。

【科研經驗】如何快速上手MATLAB數據可視化(二)的圖6

figure

x = linspace(0,10);

y = sin(4*x);

plot(x,y);


ax = gca; 

% 獲取當前坐標軸句柄

ax.FontSize = 12; 

% 設置文字大小

ax.TickDir = 'out'; 

% 設置刻度向外

ax.TickLength = [0.02 0.02];

%設置刻度長度

ax.YLim = [-2 2]; 

% 設置坐標軸范圍

常用屬性操作函數 


set   

設置圖形對象屬性


set(H,Name,Value) 

        為 H 標識的對象指定其 Name 屬性的值。

set(H,NameArray,ValueArray) 

       使用元胞數組 NameArray 和 ValueArray 指定多個屬性值。

【科研經驗】如何快速上手MATLAB數據可視化(二)的圖7

       將三個不同針狀序列的 Marker 和 Tag 屬性設置為不同值。

       值元胞數組的每一行對應于 h 中的一個對象且包含兩個值,一個對應于 Marker 屬性,一個對應于 Tag 屬性。

x = 0:30;
y = [1.5*cos(x); 4*exp(-.1*x).*cos(x); exp(.05*x).*cos(x)]';
S = stem(x,y);
NameArray = {'Marker','Tag'};
ValueArray = {'o','Decaying Exponential';...
  'square','Growing Exponential';...
  '*','Steady State'};
set(S,NameArray,ValueArray)


get   

查詢圖形對象屬性


v = get(h) 

      返回 h 標識的圖形對象的所有屬性和屬性值。

v = get(h,propertyName) 

      返回特定屬性 propertyName 的值。

【科研經驗】如何快速上手MATLAB數據可視化(二)的圖8
【科研經驗】如何快速上手MATLAB數據可視化(二)的圖9

p = plot(1:10);

get(p)

       在實際繪圖中,通過配合set和get函數的使用,實現對不同對象屬性的設置和讀取。



03


復雜繪圖實戰



      下面以同一坐標軸下多曲線繪制為例的腳本進行實戰說明:

%%讀取數據

load data


%%創建圖形窗口并指定可繪制區域的位置和大小

figure('Position', [100 100 600 475]);

hold on;


%%根據數據繪制曲線

%%擬合曲線

lineFit   = line(xdata_fit  , ydata_fit   );      

%%測量曲線誤差棒圖

Measument     = errorbar(xdata_m, ydata_m, ydata_s);  

%%驗證數據曲線

Data  = line(xVdata, yVdata );    

%%數據模型曲線1 

Model = line(xmodel, ymodel );

%%置信區間曲線1

hCI(1) = line(xmodel, ymodelL);

%%置信區間曲線2

hCI(2) = line(xmodel, ymodelU);


%設置圖像標題和橫縱坐標軸名稱

Title  = title ('Graphics title');

XLabel = xlabel('xlabel (unit)');

YLabel = ylabel('ylabel (unit)');


%圖表中顯示擬合函數關系式

Text   = text(5, 800, ...

  sprintf('\\it{y = y(x)}'));


%%設置圖例特性

hLegend = legend( ...

  [Measument, lineFit, Data, Model, hCI(1)], ...

  'Data (\mu \pm \sigma)' , ...

  'Fit (\it{C x^3+b x^2})'      , ...

  'Data'       , ...

  'Model (\it{C x^3})'    , ...

  'Interval Estimation'                , ...

  'location', 'NorthWest' );


%%設置字體、字符大小

set( gca                       , ...

    'FontName'   , 'Helvetica' );

set([Title, XLabel, YLabel, Text], ...

    'FontName'   , 'AvantGarde');

set([hLegend, gca]             , ...

    'FontSize'   , 8           );

set([XLabel, YLabel, Text]  , ...

    'FontSize'   , 10          );

set( Title                    , ...

    'FontSize'   , 12          , ...

    'FontWeight' , 'bold'      );


%設置每組曲線的顏色、類型、標記點、線寬等

set(lineFit                          , ...

  'Color'           , [0 .5 0]    );

set(Measument                            , ...

  'LineStyle'       , 'none'      , ...

  'Marker'          , '.'         , ...

  'Color'           , [.5 .5 .5]  );

set(Data                         , ...

  'LineStyle'       , 'none'      , ...

  'Marker'          , '.'         );

set(Model                        , ...

  'LineStyle'       , '--'        , ...

  'Color'           , 'r'         );

set(hCI(1)                        , ...

  'LineStyle'       , '-.'        , ...

  'Color'           , [0 0 0.5]    );

set(hCI(2)                        , ...

  'LineStyle'       , '-.'        , ...

  'Color'           , [0 0 0.5]    );

set(lineFit                          , ...

  'LineWidth'       , 2           );

set(Measument                            , ...

  'LineWidth'       , 1.5           , ...

  'Marker'          , 'o'         , ...

  'MarkerSize'      , 6           , ...

  'MarkerEdgeColor' , [.3 .3 .3]  , ...

  'MarkerFaceColor' , [.7 .7 .7]  );

set(Data                         , ...

  'Marker'          , 'o'         , ...

  'MarkerSize'      , 5           , ...

  'MarkerEdgeColor' , 'none'      , ...

  'MarkerFaceColor' , [.6 .6 1] );

set(Model                        , ...

  'LineWidth'       , 2         );

set(hCI(1)                        , ...

  'LineWidth'       , 2         );

set(hCI(2)                        , ...

  'LineWidth'       , 2         );


%%設置窗口窗格情況

set(gca, ...

  'Box'         , 'off'     , ...

  'TickDir'     , 'out'     , ...

  'TickLength'  , [.02 .02] , ...

  'XMinorTick'  , 'on'      , ...

  'YMinorTick'  , 'on'      , ...

  'YGrid'       , 'on'      , ...

  'XColor'      , [.25 .25 .25], ...

  'YColor'      , [.25 .25 .25], ...

  'YTick'       , 0:500:2500, ...

  'LineWidth'   , 1         );


【科研經驗】如何快速上手MATLAB數據可視化(二)的圖10



04


小結



      

      本講主要介紹圖形繪制界面的句柄操作和屬性設置函數,主要包括gcf、gca圖形圖像句柄函數,以及set、get的屬性設置和讀取函數,并通過一個具體的復雜繪圖實例進行實戰演示。



END 


【科研經驗】如何快速上手MATLAB數據可視化(二)的圖11



                         作者:張開宇(北京理工大學)


相關鏈接:

【科研經驗】快速上手MATLAB數據可視化(一)

【科普系列】利用PPT作圖增強科技論文表達力

【科普系列】如何利用3ds MAX畫兩個半徑不同的球體

【科研經驗】3D MAX快速入門-簡單基本體構建反應機理圖

【科研經驗】如何用PPT畫簡單示意圖

【科研經驗】2020版Origin作圖技巧分享

【科研經驗】使用ppt畫出反應機理示意圖



【科研經驗】如何快速上手MATLAB數據可視化(二)的圖12

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1
1