1. 程式人生 > >在MATLAB的figure圖中畫區域性放大的圖中圖

在MATLAB的figure圖中畫區域性放大的圖中圖

在MATALB繪圖中,有時會遇到這樣的情況,需要通過放大figure圖的區域性,針對細節加以說明。例如:在給定的尺度下有兩條或多條曲線難以區別,此時就需要對其進行區域性放大來加以區分。參考網上的解決方法1總結了以下方法2

1、利用magnify函式
2、利用axes函式

方法一

源自MathWorks社群,利用magnify.m檔案,可以登入MathWorks帳號後下載magnify函式(沒有帳號可以直接註冊一個)。
magnify下載頁面
1.下載解壓後將magnify.m檔案放入需要操作的figure圖的工作目錄下
2.開啟(或選中)figure圖,在MATLAB命令視窗輸入magnify
3.在figure圖中,將滑鼠停在想要放大的區域處,點選滑鼠右鍵不要鬆開手,此時滑鼠點選處出現類似放大鏡的方框(可以一直按住右鍵並移動滑鼠改變區域位置),並通過“<”和“>”鍵縮小或擴大方框範圍,通過“-”和“+”鍵減小或增加區域性縮放比例,直到得到自己想要的小圖後即可鬆開滑鼠右鍵。若想得到多個小圖,重複上述操作即可。(這一過程通常叫做固化)
4.通過figure選單欄中的tools->edit plot選項或選中工具欄中的白色箭頭來調節小圖位置,也可單獨在小圖中編輯圖形的座標軸、線形、顏色等。
方法一所見即所得,可以放大一個或多個區域。

方法二

MATLAB文件中axes函式的解釋為Create axes graphics object,即建立座標軸圖形物件。其中有一個功能Position Multiple Axes in Figure Window可以Create multiple axes in a single figure window and specify their positions,也就是可以在一幅圖形視窗內建立多個座標軸並指定它們的位置。

axes('Position',[subNormalxLabel,subNormalyLabel,normalWidth,normalHeight])

其中,subNormalxLabel為子圖左下角位置的歸一化橫座標,subNormalxLabel為子圖左下角位置的歸一化縱座標,計算公式為:
subNormalxLabel = (該位置的橫座標-橫座標起始值)/橫座標量程
subNormalyLabel = (該位置的縱座標-縱座標起始值)/縱座標量程
normalWidth為子圖的歸一化寬度,normalHeight為子圖的歸一化高度,計算方式類似。

MATLAB給出的一個示例程式碼:

axes('Position',[0.1,0.1,0.7,0.7])
contour(peaks(20))

axes('Position',[0.65,0.7,0.28,0.28])
surf(peaks(20))

效果圖
這裡寫圖片描述
實際中遇到的問題如下圖:在給定的尺度下,兩條曲線幾乎重合(紅色曲線幾乎被藍色曲線覆蓋),需要對區域性放大以示區分,兩條曲線的資料(x1,y1)、(x2,y2)已知,x1、y1、x2、y2均為陣列。
這裡寫圖片描述
1.在MATLAB下,選中上圖的figure圖,利用axes語句(例如axes('Position',[0.4 0.3 0.3 0.25]);),得到如下的圖中圖
這裡寫圖片描述


2.利用已知資料將大圖中的曲線畫入子圖中,並利用figure中的放大鏡等工具在大圖中確定需要放大的範圍及效果(例如放大區域為[xmin, xmax, ymin, ymax]),而後將子圖的座標軸範圍改為[xmin, xmax, ymin, ymax]即可,隨後可對子圖進行編輯,效果如下
這裡寫圖片描述
如果想得到多個子圖可重複上述操作。
方法二可以精確到具體的放大範圍,也可以放大多個區域。