MATLAB04:基礎繪圖

學習一門技術最好的方式就是閱讀官方文檔,可以查看MATLAB官方文檔

圖線的繪製與裝飾

使用plot()函數繪製圖線

在MATLAB中,使用plot()函數繪製圖線,其語法爲:

plot(x,y,LineSpec)

各參數意義如下:

  • x: 圖線上點的x座標

  • y: 圖線上點的y座標

  • LineSpec: 圖線的線條設定,三個指定線型,標記符號顏色設定符組成一個字符串,設定符不區分先後.具體細節請參考官方文檔.

    線型符號 線型設定符 標記 標記設定符 顏色 顏色設定符
    - 實線(默認) o 圓圈 y 黃色
    -- 虛線 + 加號 m 品紅色
    : 點線 * 星號 c 青藍色
    -. 點劃線 . r 紅色
    x 叉號 g 綠色
    s 方形 b 藍色
    d 菱形 w 白色
    ^ 上三角 k 黑色
    v 下三角
    > 右三角
    < 左三角
    p 五角形
    h 六角形

下面例子演示了繪製(0,2π)(0, 2\pi)內餘弦函數的圖像:

x = 0:pi/20:2*pi;
y = cos(x);
plot(x, y, 'r.-')

plot的基本使用

裝飾圖線

  • 使用legend()函數爲圖片增加圖例

    使用legend(label1, ..., labelN)函數可以爲圖片添加圖例.

    x=0:0.5:4*pi;
    y=sin(x); h=cos(x); w=1./(1+exp(-x)); g=(1/(2*pi*2)^0.5).*exp((-1.*(x-2*pi).^2)./(2*2^2));
    plot(x,y,'bd-' ,x,h,'gp:',x,w,'ro-' ,x,g,'c^-');		% 繪製多條圖線
    legend('sin(x)','cos(x)','Sigmoid','Gauss function');	% 添加圖例
    

    使用legend增加圖例

  • 使用title()*label()爲圖片增加標題和標籤

    x = 0:0.1:2*pi; y1 = sin(x); y2 = exp(-x);
    plot(x, y1, '--*', x, y2, ':o');
    xlabel('t = 0 to 2\pi');
    ylabel('values of sin(t) and e^{-x}')
    title('Function Plots of sin(t) and e^{-x}');
    legend('sin(t)','e^{-x}');
    

    使用title()和*label()爲圖片增加標題和標籤

  • 使用text()annotation()爲圖片增加註解

    x = linspace(0,3); y = x.^2.*sin(x); plot(x,y);
    line([2,2],[0,2^2*sin(2)]);
    str = '$$ \int_{0}^{2} x^2\sin(x) dx $$';
    text(0.25,2.5,str,'Interpreter','latex');
    annotation('arrow','X',[0.32,0.5],'Y',[0.6,0.4]); 
    

    使用text()和annotation()爲圖片增加註解

控制座標軸,邊框與網格

使用下列命令可以控制座標軸,邊框與網格.

命令 作用
grid on/off 設置網格可見性
box on/off 設置邊框可見性
axis on/off 設置座標軸可見性
axis normal 還原默認行爲,將圖框縱橫比模式和數據縱橫比模式的屬性設置爲自動
axis square 使用相同長度的座標軸線,相應調整數據單位之間的增量
axis equal 沿每個座標軸使用相同的數據單位長度
axis tight 將座標軸範圍設置爲等同於數據範圍,使軸框緊密圍繞數據

下面的例子演示axis命令的效果:

t = 0:0.1:2*pi; x = 3*cos(t); y = sin(t);
subplot(2, 2, 1); plot(x, y); axis normal
subplot(2, 2, 2); plot(x, y); axis square
subplot(2, 2, 3); plot(x, y); axis equal
subplot(2, 2, 4); plot(x, y); axis equal tight

axis命令的效果

繪製多條圖線

在一個圖像上繪製多條圖線

默認情況下,每次執行plot()函數都會清除上一次繪圖的結果,多次執行plot()只會保留最後一次繪製的圖形.

plot(cos(0:pi/20:2*pi));
plot(sin(0:pi/20:2*pi));

多次執行plot只會保留最後一次繪製的圖形

我們可以使用hold onhold off命令控制繪圖區域的刷新,使得多個繪圖結果同時保留在繪圖區域中.

hold on		% 提起畫筆,開始繪製一組圖片			
plot(cos(0:pi/20:2*pi));
plot(sin(0:pi/20:2*pi));
hold off	% 放下畫筆,該組圖片繪製完畢

使用hold命令控制繪圖區域的刷新

在一個窗口內繪製多個圖像

使用subplot()函數可以在一個窗口內繪製多個圖像.其語法爲:

subplot(m,n,p)

該命令表示將當前圖窗劃分爲m×n個網格,並在第p個網格內繪製圖像.

示例如下:

subplot(2,2,1);
x = linspace(-3.8,3.8);
y_cos = cos(x);
plot(x,y_cos);
title('Subplot 1: Cosine')

subplot(2,2,2);
y_poly = 1 - x.^2./2 + x.^4./24;
plot(x,y_poly,'g');
title('Subplot 2: Polynomial')

subplot(2,2,[3,4]);
plot(x,y_cos,'b',x,y_poly,'g');
title('Subplot 3 and 4: Both')

在一個窗口內繪製多個圖像

圖形對象的操作

在MATLAB中,圖形都是以對象的形式儲存在內存中,通過獲取其圖形句柄可以對其進行操作.

在MATLAB中圖形都是以對象的形式儲存的

獲取圖形句柄

圖形句柄本質上就是一個浮點數,可以唯一確定一個圖形對象.下面幾個函數用於獲取圖形句柄.

Function Purpose
gca() 獲取當前座標軸的句柄
gcf() 獲取當前圖像的句柄
allchild(handle_list) 獲取該對象的所有子對象的句柄
ancestor(h,type) 獲取對象最近的type類型的祖先節點
delete(h) 刪除某對象
findall(handle_list) 獲取該對象的後代對象

所有繪圖函數也會返回圖形對象的句柄.

繪圖函數也會返回圖形對象的句柄

通過圖形句柄操作圖形屬性

使用get()set()函數可以對圖形對象的屬性進行訪問和修改.訪問官方文檔可以查看所有圖形對象的屬性.

  • set(H,Name,Value)
  • v = get(h,propertyName)

圖形對象的屬性

下面兩個例子演示使用圖形句柄操作圖形對象:

  1. 改變座標軸屬性:

    % 第一張圖
    set(gca, 'FontSize', 25);
    
    % 第二張圖
    set(gca, 'XTick', 0:pi/2:2*pi);
    set(gca, 'XTickLabel', 0:90:360);
    
    % 第三張圖
    set(gca, 'FontName', 'symbol');
    set(gca, 'XTickLabel', {'0', 'p/2', 'p', '3p/2', '2p'});
    

    句柄操作實例1

  2. 改變線型

    h = plot(x,y); 
    set(h, 'LineStyle','-.', ...
    	'LineWidth', 7.0, ...
    	'Color', 'g');
    

    句柄操作實例2

將圖形保存到文件

使用saveas(fig,filename)命令可以將圖形對象保存到文件中,其中fig爲圖形句柄,filname爲文件名.

saveas(gcf, 'myfigure.png')

使用saveas()函數將圖像保存成位圖時,會發生失真.要精確控制生成圖片的質量,可以使用print()函數,見官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章