MATLAB繪圖系列教程 | 復雜數據圖疊加,hold on,子圖布局調整
一、利用棋盤格思想創(chuàng)建freestyle的子圖
先聊在MATLAB里如何正確地創(chuàng)建子圖——即正確使用subplot
函數。
首先來看函數的說明文檔:
subplot(m,n,p) 將當前圖窗劃分為m×n的網格,并在p指定的位置創(chuàng)建坐標區(qū)。按行號對子圖位置進行編號。第一個子圖是第一行的第一列,第二個子圖是第一行的第二列,依此類推。
此外,subplot命令會將新創(chuàng)建的坐標區(qū)設為當前坐標區(qū)——可以認為是正在活動的坐標區(qū);或者更直白地講,就是你再運行一次plot函數之后圖像默認出現的坐標區(qū)!
下面用一個簡單的示意圖來解釋一下。圖圖想要繪制一張數據圖,其位于整個畫面的中下部位置。那么首先需要將整個figure大概分成一個3×3的網格,中下部對應的網格坐標是(3,3)。按照matlab內部的對應關系,這應該是第8個棋盤格。只要執(zhí)行subplot(3,3,8)
命令即可創(chuàng)建。


同理,再執(zhí)行一個subplot(3,3,2)命令會在整個畫面的中上部創(chuàng)建一個坐標區(qū)。


?上面的subplot(3,3,8)命令我們可以簡寫成subplot(338);
?subplot(3,3,2)& subplot(3,3,8)兩條命令我們可以一起合并寫成subplot(3,3,[2 8])
有了上面的思路我們就可以創(chuàng)建各種各樣的坐標區(qū)進行繪制,對子圖的位置和形式也不再有限制?。?/p>
下方給出一個示例,利用“棋盤格”的思想進行subplot函數的布置!

在命令行窗口輸入:
>> plotedit on
可以打開編輯模式,進一步自由調整子圖的位置和大小:


二、你真的理解頻頻出現出現的hold on嗎?
再來詳細聊聊hold on
到底是什么,可能你在很多的MATLAB文件中看到過這個命令,但是卻從來沒有去深究過這個命令!
先來看看官方幫助文檔的介紹:
hold on: 保留當前坐標區(qū)中的繪圖,從而使新添加到坐標區(qū)中的繪圖不會刪除現有繪圖。如果不存在坐標區(qū),hold命令會創(chuàng)建坐標區(qū)。
從上面解釋中我們可以得到下方信息:
?hold on針對的是一個坐標區(qū)(中的繪圖);
?如果不加指明,指的就是當前坐標區(qū);
?如果沒有任何坐標區(qū),hold on命令會新建一個坐標區(qū)。
聽著有一些復雜,但是其實也很好理解,建議閱讀一下圖圖前期的文章{戳這里是超鏈接}——關于一個figure窗口中所有對象的層次結構,并且牢牢記住當前圖窗、當前坐標軸、當前對象這三個概念。有了上述三個概念,并且在每次繪圖之前思考我的當前坐標軸是什么,就不會搞錯了。
我們還是從簡單的繪圖看起,首先創(chuàng)建一些初始數據
接著我們繪制第一張圖,此時hod on被注釋掉了,我們發(fā)現應該出現兩條線的圖窗上僅出現了一條線。

當我們繪制第二張圖,此時hod on沒有注釋掉時,我們發(fā)現兩條線都出現了。

以上的內容相信大家以前都已經非常熟悉,下面我們看看如果有多個子圖怎么辦。
首先創(chuàng)建一些子圖,其中返回值ax1,ax2,ax3是對應子圖的句柄(指針)。
分別用和不用hold on命令來在這些圖窗上繪制圖,看看會有什么結果:
大家發(fā)現只有ax2對應的坐標區(qū)僅有一條線,而其他兩個坐標區(qū)都有兩條線,這就是hold on在起作用~


三、復雜形式的數據圖繪制案例
本推送屬于繪圖系列教程中非常重要的一環(huán):介紹一組稍復雜的MATLAB繪圖命令。
實現的示例圖(demo)如下所示:

該圖中結合了柱狀圖,折線圖和散點圖。其中:
柱狀圖有漸變顏色的填充;
折線圖與柱狀圖分屬兩個不同的平面;
散點圖的Edge具有不同的顏色設置;
含有觀察視角的設置方式;
下面分塊介紹代碼:
A
f.Color='w';代表將圖窗的顏色設置成了白色。

B
隨機生成了一些數據進行繪制,其中BarHandle LineHandel PointHandel 三個分別是圖形句柄(指針),方便后續(xù)控制點、線的樣式。

C
繪圖后的數值控制。
D
E
坐標軸視角控制View屬性。
完整代碼
完整的教程請關注公眾號:圖通道