眾所周知,matlab不僅擅長處理與矩陣相關的數值運算,在科學可視化方面,它同樣有著很深的積澱。它提供的眾多功能豐富的函數,可以很好地滿足我們需要用到圖形來展示數值信息的各種各樣的需求。
MATLAB具有二維、三維乃至四維的圖形表現能力。它可以從線型、邊界色、色彩、渲染、光線、視角等方面把數據的特徵表現出來。
MATLAB的圖視化功能是建立在一組圖形對象的基礎之上。圖形對象的核心是圖形的句柄(Granhics Handle)操作。
1、底層(Low-level)繪圖指令:直接對句柄進行操作。底層繪圖指令控制和表現數據圖形的能力比高層繪圖指令強。但是靈活多變,較難掌握。2、高層(High-level)繪圖指令:建立在底層指令之上。常用的一些底層指令如下所示:
gcf:返回當前窗口對象的句柄(Get CurrentFigure)
gca:返回當前軸對象的句柄(Get Current Axes)
gco:返回當前圖形對象的句柄(Get CurrentObject)
get:獲得句柄圖形對象的屬性和返回某些對象的句柄值
set:改變圖形對象的屬性
本文主要介紹一些高層繪圖指令的相關函數:
x=0:0.01:2*pi;
y=cos(x);
plot(x,y);
xlabel('x軸'); % x軸註解
ylabel('y軸'); % y軸註解
title('餘弦函數'); % 圖形標題
legend('y = cos(x)'); % 圖形註解
gtext('y = cos(x)'); % 圖形註解 ,用滑鼠定位註解位置
grid on; % 顯示格線
在同一個畫面上建立幾個坐標系, 用subplot(m,n,p)命令;
把一個畫面分成m×n個圖形區域, p代表當前的區域號,在每個區域中分別畫一個圖。
x=linspace(0,2*pi,30);y=sin(x); z=cos(x);
u=2*sin(x).*cos(x);v=sin(x)./cos(x);
subplot(2,2,1),plot(x,y),axis([02*pi -1 1]),title('sin(x)')
subplot(2,2,2),plot(x,z),axis([02*pi -1 1]),title('cos(x)')
subplot(2,2,3),plot(x,u),axis([02*pi -1 1]),title('2sin(x)cos(x)')
subplot(2,2,4),plot(x,v),axis([02*pi -20 20]),title('sin(x)/cos(x)')
Matlab繪製三維圖,最常用的是surf、mesh這兩個函數及其衍生函數。
x=linspace(-2,2, 25); % 在x軸上取25點
y=linspace(-2, 2, 25); % 在y軸上取25點
[xx,yy]=meshgrid(x, y); % xx和yy都是21x21的矩陣
zz=xx.*exp(-xx.^2-yy.^2); % 計算函數值,zz也是21x21的矩陣
surf(xx, yy, zz); % 畫出立體曲面圖
以peaks函數為例,以各種不同方法進行繪圖
1、meshz可將曲面加上圍裙:
[x,y,z]=peaks;
meshz(x,y,z);
axis([-inf inf -inf inf -inf inf]);
2、waterfall可在x方向或y方向產生水流效果:
[x,y,z]=peaks;
waterfall(x,y,z);
axis([-inf inf -inf inf -inf inf]);
3、y方向的水流效果:
[x,y,z]=peaks;
waterfall(x',y',z');
axis([-inf inf -inf inf -inf inf]);
4、meshc可以同時畫出網狀圖與等高線:
[x,y,z]=peaks;
meshc(x,y,z);
axis([-inf inf -inf inf -inf inf]);
5、surfc同時畫出曲面圖與等高線:
[x,y,z]=peaks;
surfc(x,y,z);
axis([-inf inf -inf inf -inf inf]);
6、對比meshc、meshz、surfc、surfl這四個函數
[x,y]=meshgrid(0:0.1:2,1:0.1:3)
z=(x-1).^2+(y-2).^2-1
subplot(2,2,1);meshc(x,y,z)
subplot(2,2,2);meshz(x,y,z)
subplot(2,2,3);surfc(x,y,z)
subplot(2,2,4);surfl(x,y,z)
舉一個例子,使用同一色圖,以不同著色方式繪製圓錐體。
[x,y,z] =cylinder(pi:-pi/5:0,10)
colormap(lines)
subplot(1,3,1)
surf(x,y,z);
shading flat
subplot(1,3,2)
surf(x,y,z);
shading interp
subplot(1,3,3)
surf(x,y,z)
作者:極值學院佔學長