matlab—基礎繪圖
plot()
plot()
函式是matlab中用於作圖的函式,常用格式為: plot(x,y)
,x代表橫座標,y代表縱座標,一般情況下如果是畫一組連續的圖,x和y 一般都是矩陣
還有一種格式: plot(y)
,如果只給一個引數,那麼這個引數預設是代表縱座標,而橫座標的值是預設值。舉個例子,輸入 plot(cos(0:pi/20:2*pi));
,做出來的圖是

hold on/off
如果我們寫兩個 plot 函式
plot(cos(0:pi/20:2*pi)); plot(sin(0:pi/20:2*pi));
他不會把這兩個圖畫出來,因為 matlab 在執行程式碼的時候,後面的畫圖會把前面的畫圖清空掉,如果想把這兩個函式的圖都畫出來,應該使用 hold on
plot style
我們還可以給圖加上想要的樣式。格式: plot(x,y,'str');
, str
的引數見下圖


legend()
光有圖,沒有說明標籤也不行,所以我們需要用到 legend()
這個函式,以一個例子來說明,我們首先做四個函式的影象
x = 0 : 0.5 : 4 * pi; y = sin(x); h = cos(x); w = 1./(1+exp(-x)); g = (1/(4*pi)^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');
他會根據你plot函式的順序,依次給對應的線標上對應的標籤

title() & label()
到現在為止這個圖還不算完整,缺少橫縱座標的說明,以及標題,所以接下來我們就要用到幾個函式來完善它: title()
、 xlabel()
、 ylabel()
、 zlabel()
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}');
text() and annotation()
如果我們需要在影象中加入說明性的文字和某些圖形比如說箭頭,就會分別用到兩個函式,一個是 text()
,一個是 annotation()
首先觀察這個函式的橫座標,是從 0 到 3,所以我們要用程式碼
x = linspace(0,3);
,這裡 y 的函式我也直接給出來 y = x.^2.*sin(x);
,再看圖上,有一條線段 x = 2,他需要用line()函式,通常其呼叫格式為: line([x 起始座標, x 終止座標],[y 起始座標, y 終止座標])
;,所以使用 line([2,2][0,x.^2.*sin(2)])
畫出線段
剩下的就是圖中的一段數學公式,這個需要mathjax或者letex的基礎,我直接給出程式碼不過多解釋,瞭解一下即可

文字有了,直接用 text()
函式寫進去。 text(x座標, y座標, str,'Interpreter','latex');
,後面的'Interpreter','latex'這個是固定格式,填上去就行了
最後用 annotation()
函式畫箭頭, annotation('shape','x',[x 起始位置, x 終止位置],'y',[y 起始位置, y 終止位置]);
, shape
引數可以有很多值,具體見下表
shape引數 | 說明 |
---|---|
line | 線 |
arrow | 箭頭 |
doublearrow | 雙箭頭 |
textarrow | 帶文字框的箭頭 |
這個函式中的座標並 不是我們影象裡對應的座標 ,而是我們進行 歸一化 以後的座標,假設一個圖的寬 w,高 h,座標 [x,y],歸一化以後的座標就是 [x/w,y/h]
下面給出完整程式碼
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('Interpreter','latex','String',str,'Position',[0.25 2.5]); annotation('arrow','x',[0.32,0.5],'y',[0.6,0.4]);
subplot()
現在要求在一個figure上,畫很多不同的圖,就必須用 subplot()
函式,其呼叫格式為: subplot(m,n,x);
clear; clc; x = -10 : 0.1 : 10; y1 = x.^2-8; y2 = exp(x); subplot(2,1,1);plot(x,y1); subplot(2,1,2);plot(x,y2);
Save Figures
我們有時候花完了圖,想要儲存,這時候就要用 saveas()
函式,其呼叫格式為: saveas(gcf,’filename’,’formattype’);
, gcf
就是你當前影象的預設的名字, filename
也不用多說,就是你給你儲存的影象起個名字,關鍵是這個 formattype
,它其實有很多引數,見下圖
