學習MATLAB的繪圖功能
具體內容有:
1.繪製二維圖形,並對二維圖形進行標註
2.調整圖形
3.子圖窗口的劃分
4.繪製三維圖形
5.使用交互繪圖工具
1.二維圖形
1)基本圖形的繪製
>> x = [0:2:18];
>> y = [0,0.33,4.13,6.29,6.85,11.19,13.19,13.96,16.33,18.17];
>>plot(x,y),title('實驗1'),xlabel('時間'),ylabel('距離'),grid
以上代碼可以在一行上使用一起執行也可以分開執行,當使用逗號間隔時表示要一起執行,各函數分別表示: title(標題),xlabel(時間),ylabel(距離),grid(添加柵格)
代碼執行的效果如下圖:
2)創建多個圖形
MATLAB可以隨時生成和顯示圖形窗口,但生成的第二幅圖形會覆蓋掉第一幅圖形。解決方法有兩個:一是用pause命令暫停程序,二是用figure創建新的圖形。
>> figure(2)
可以創建一個新的空白繪圖窗口,如果不指定括號中的編號,則MATLAB會自動產生圖形編號
基本繪圖功能函數總結如下:
函數 | 功能 |
---|---|
plot | 創建一個x-y座標圖 |
title | 添加標題 |
xlabel | 添加x軸標註 |
ylabel | 添加y軸標註 |
gride | 添加柵格 |
pause | 暫停程序觀察圖形 |
figure | 定義當前圖形 |
hold | 保持圖形 |
3)繪製多條曲線
hold on
方法可以用於繪製多條曲線,用於保持圖形
>> x = 0:pi/100:2*pi;
>> y1 = cos(x*4);
>> plot(x,y1)
>> y2 = sin(x);
>> hold on;
>> plot(x,y2)
繪製圖像後結果如下:
另一種方法可以使用
>> plot(x,y1,x,y2)
也可以繪製兩條曲線
顏色問題:MATLAB中,繪圖命令畫出的第一條曲線以藍色爲默認顏色,使用hold on
方法每條線是由不同的繪圖命令完成的,分兩次完成繪製,因此兩條曲線的顏色相同。plot(x,y1,x,y2)
語句是一次畫出兩個圖形,爲了區分第二個圖形的默認顏色是綠色。
example:
>> x = 0:pi/100:2*pi;
>> y1 = cos(x) * 2;
>> y2 = cos(x) * 3;
>> y3 = cos(x) * 4;
>> y4 = cos(x) * 5;
>> z = [y1,y2,y3,y4];
>> plot(x,y1,x,y2,x,y3,x,y4)
4)peaks函數
函數peaks是MATLAB中的雙變量正態分佈的實體模型函數,用於演示圖形功能。若函數peaks只有一個變量n,則會產生一個n*n的矩陣,函數peaks創建的矩陣可以作爲函數plot的自變量。
>> plot(peaks(100))
5)單複數數組繪圖
如果plot的輸入是一個複數數組,則MATLAB以複數的實部爲x軸,虛部爲y軸進行繪圖
>> A = [0+0i,1+2i,2+5i,3+4i];
>> plot(A),title('複數繪圖'),xlabel('實部'),ylabel('虛部')
6)雙複數數組繪圖
如果plot的輸入參數是兩個複數數組,則忽略複數的虛部進行繪圖。以第一個數組的實部作爲x軸座標,以第二個數組的虛部作爲y軸座標,繪製曲線。
>> A
A =
0.0000 + 0.0000i 1.0000 + 2.0000i 2.0000 + 5.0000i 3.0000 + 4.0000i
>> B = sin(A)
B =
0.0000 + 0.0000i 3.1658 + 1.9596i 67.4789 -30.8794i 3.8537 -27.0168i
>> plot(A,B),title('複數繪圖'),xlabel('第一個數組的實部'),ylabel('第二個數組的實部')
警告: 複數 X 和/或 Y 參數的虛部已忽略
7)線條,顏色和標記的風格
help plot
doc plot
可以獲取線條顏色和標記風格的詳細信息,風格由中三部分組成
線條類型 | 點類型 | 顏色 |
---|---|---|
-實線 | · 點線 | y 黃色 |
:點 | o 圈線 | r 紅色 |
-. 點劃線 | × x線 | c 青色 |
– 虛線 | +字線 | m 洋紅色 |
* 星形線 | g 綠色 | |
s 方形 | b 藍色 | |
d 菱形 | w 白色 | |
p 五角星 | b 藍色 | |
h 六角星 | k 黑色 |
example:
plot(x,y,':ok') % 點,圓圈,黑色
plot(x,y,'--xr') % 虛線,x形狀,紅色
plot(x,y,'-b') % 實線,默認點類型,藍色
8)座標軸定標和圖例標註
函數 | 用法 |
---|---|
axis | 如果沒有輸入參數就將座標軸固定在當前配置狀態,再次輸入axis會恢復對座標軸的控制 |
axis(v) | axis的輸入參數是一個四維矢量,分別定義了x軸和y軸的最小值和最大值,格式爲[xmin,xmax,ymin,ymax] |
legend(‘string1’,’string2’,etc) | 添加圖例,對不同曲線加以說明 |
text(x_coordinate,y_coordinate,’string’) | 在圖形的不同位置添加文本框,輸入參數爲文本框的位置和內容 |
gtext(‘string’) | 添加文本框,框的位置由鼠標操作確定,該命令與函數text類似 |
example:
將x軸限定在-2到+3的範圍內,將y軸限定在0到10範圍內
axis([-2,3,0,10])
2.子圖
使用subplot(m,n,p)
命令可以把圖形窗口分成m行n列的多個區域,並在第p個小窗口繪製下一個圖形
example:
>> x = 0:pi/20:2*pi;
>> subplot(2,1,1) % 在兩行一列的上半部分繪圖
>> plot(x,sin(x))
>> subplot(2,1,2) % 在兩行一列的下半部分繪圖
>> plot(x,sin(2*x))
3.其他類型的二維圖形
1)極座標圖
使用函數polar(theta,r)
>> x = 0:pi/100:pi;
>> y = sin(x);
>> polar(x,y)
2)對數圖
>> x = 0:0.5:50;
>> y = 5 * power(x,2);
>> subplot(2,2,1)
>> plot(x,y),title('plot圖')
>>
>> subplot(2,2,2)
>> semilogx(x,y),title('semilogx圖')
>>
>> subplot(2,2,3)
>> semilogy(x,y),title('semilogy圖')
>>
>> subplot(2,2,4)
>> loglog(x,x),title('loglog圖')
3)條形圖和餅圖
條形圖,柱狀圖和餅圖是三種最常見的圖形表現方式
函數 | 用法 |
---|---|
bar(x) | 若x爲矢量則繪製垂直條形圖,若爲二維矩陣則按行分組顯示 |
barh(x) | 若x爲矢量則繪製水平條形圖,若爲二維矩陣則按行分組顯示 |
bar3(x) | 繪製三維條形圖 |
bar3h(x) | 繪製三維水平條形圖 |
pie(x) | 繪製餅圖。矩陣x的元素用餅圖中的一部分表示 |
pie3(x) | 繪製三維餅圖。矩陣x中的元素用餅圖的一部分表示 |
hist(x) | 繪製柱狀圖 |
example:
>> x = [1,2,5,4,8];
>> y = [x;1:5];
>> subplot(2,2,1),bar(x),title('垂直條形圖')
>> subplot(2,2,2),bar(y),title('兩組顯示的垂直條形圖')
>> subplot(2,2,3),bar3(y),title('三維條形圖')
>> subplot(2,2,4),pie(x),title('餅圖')
>>
4)柱狀圖
柱狀圖是一種用於數據統計分析的圖形,通過它可以顯示出數據的分佈情況
>> x = [100,95,74,87,22,78,34,35,93,88,86,42,55,48];
>> hist(x)
數據被默認分成10份,如果原始數據量很大,可以分成更多份
hist(x,25)
如果把函數hist賦值給一個變量,那麼圖中每個條形圖中的數據就會存儲在矩陣A中:
>> A = hist(x)
A =
1 2 1 1 1 0 1 1 3 3
4)雙y軸圖
有時需要把兩個x-y座標圖輸入到同一座標圖中,在這種情況下,如果兩個座標軸y軸的度量相差很多的話會會按照較大的度量來確定座標軸的度量,這樣度量較小的部分變化難以看出,如下所示:
首先在第一部分採用普通方式繪製二維圖形:
>> x = 0:pi/20:2*pi;
>> y1 = sin(x);
>> y2 = exp(x);
>> subplot(2,1,1)
>> plot(x,y1,x,y2)
第二部分使用plotyy函數,可以在一張圖中使用兩個不同的y軸座標作圖,左邊是第一組數據的y軸座標,右邊是第二組數據的y軸座標
>> subplot(2,1,2)
>> plotyy(x,y1,x,y2)
函數plotyy可以選擇不同的繪圖類型,下面的代碼採用對數座標軸
>> subplot(2,1,1)
>> plotyy(x,y1,x,y2,'semilogy')
>> subplot(2,1,2)
>> plotyy(x,y1,x,y2,'semilogx')
4.三維繪圖
三維繪圖的MATLAB命令如下:
函數 | 用法 |
---|---|
plot3(x,y,z) | 繪製三維線圖 |
come3(x,y,z) | 繪製具有動畫效果的三維線圖 |
mesh(z)或mesh(x,y,z) | 繪製網格曲面圖 |
surf(z)或surf(x,y,z) | 繪製表面圖 |
Shading interp | 渲染曲面圖中的顏色 |
Shading flat | 用純色給每個網格着色 |
colormap(map_name) | 按用戶設定的顏色繪製曲面圖 |
contour(z)或contour(x,y,z) | 繪製三維等高圖 |
surfc(z)或surfc(x,y,z) | 同時繪製曲面圖和等高圖 |
pcolor(z)或pcolor(x,y,z) | 繪製僞色圖 |
1)三維線圖
plot3是繪製三維線圖的基本函數,通過x,y,z三個輸入矢量在三維空間內繪製三維線圖
>> x = linspace(0,10*pi,1000);
>> y = cos(x);
>> z = sin(x);
>> plot3(x,y,z)
>> grid
>> xlabel('角度'),ylabel('cos(x)'),zlabel('sin(x)'),title('plot3繪圖')
2)mesh曲面圖
注意:若函數自變量是一個m*n矩陣,則矩陣中元素的數值爲z軸座標,元素的位置分別是x軸座標和y軸座標(要注意理解)
>> z = [1,2,3,4,5,6,7,8,9,10;
2,4,6,8,10,12,14,16,18,20;
3,4,5,6,7,8,9,10,11,12];
>> mesh(z),xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis')
mesh可以有三個自變量,mesh(x,y,z)。矢量x的元素個數必須和矩陣z的列數相同,矢量y的元素個數必須和矩陣z的行數相同(要注意理解)
>> x = linspace(1,50,10)
x =
1.0000 6.4444 11.8889 17.3333 22.7778 28.2222 33.6667 39.1111 44.5556 50.0000
>> y = linspace(500,1000,3)
y =
500 750 1000
>> z = [1,2,3,4,5,6,7,8,9,10;
2,4,6,8,10,12,14,16,18,20;
3,4,5,6,7,8,9,10,11,12]
z =
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 4 5 6 7 8 9 10 11 12
>> mesh(x,y,z)
3) surf曲面圖
surf和mesh的不同之處在於,surf圖繪製的是着色的三維曲面圖,其顏色由z決定。
surf圖的輸入參數和mesh相同可以有一個輸入變量也可以有三個輸入變量。surf(z)以z的行列作爲x軸和y軸的座標。
使用shading命令可以控制圖形的陰影效果
shading interp
使用colormap命令可以控制圖形的顏色
>> mesh(x,y,z),colormap(summer)
4) 等高圖
>> x = [-1:0.2:2];
>> y = x;
>> [X,Y] = meshgrid(x,y); % 採樣點
>> Z = X .* exp(-X.^2 - Y .^2);
>> subplot(2,2,1),mesh(X,Y,Z)
>> subplot(2,2,2),surf(X,Y,Z)
>> subplot(2,2,3),contour(X,Y,Z)
>> subplot(2,2,4),surfc(X,Y,Z)
5) 僞色圖
僞色圖與等高圖類似,不同之處在於僞色圖是用帶柵格的二維陰影圖代替等高圖中的輪廓線。根據MATLAB中實體模型函數peaks中的輸入參數矩陣x,y,z做出僞色圖,輸出結果是一個類似山峯的曲面:
>> [x,y,z] = peaks;
>> subplot(2,2,1),pcolor(x,y,z)
>>
>> subplot(2,2,2),pcolor(x,y,z),shading interp
>>
>> subplot(2,2,3),pcolor(x,y,z),shading interp,hold on,contour(x,y,z,20,'k') % 其中20代表繪製20條等高線,k代表黑色
>>
>> subplot(2,2,4),contour(x,y,z)
5.圖形窗口的簡單操作
自己嘗試一下就好