MATLAB入門教程系列--圖形處理

2021-02-19 高校FM

前面推送了兩篇MATLAB入門教程系列文章,今天是這個系列文章的最後一篇,我們一起看看MATLAB強大的圖形處理能力。

基本xy平面畫圖命令  

MATLAB不但擅長於矩陣相關的數值運算,也適合用在各種科學目視表示(Scientificvisualization)。

本節將介紹MATLAB基本xy平面及xyz空間的各項畫圖命令,包括一維曲線及二維曲面的繪製、列印及存檔。  

plot是繪製一維曲線的基本函數,但在使用此函數之前,我們需先定義曲線上每一點的x 及y座標。

下例可畫出一條正弦曲線:  

close all;

x=linspace(0, 2*pi, 100); % 100個點的x座標  

y=sin(x); % 相應的y座標  

plot(x,y);  


小整理:MATLAB基本畫圖函數

plot: x軸和y軸均為線性刻度(Linear scale)

loglog: x軸和y軸均為對數刻度(Logarithmic scale)

semilogx: x軸為對數刻度,y軸為線性刻度

semilogy: x軸為線性刻度,y軸為對數刻度  

若要畫出多條曲線,僅僅需將座標對依次放入plot函數就可以:  

plot(x, sin(x), x, cos(x));  

 

若要改變顏色,在座標對後面加上相關字串就可以:  

plot(x, sin(x), 'c', x, cos(x), 'g');  

 

若要同一時候改變顏色及圖線型態(Line style),也是在座標對後面加上相關字串就可以: 

plot(x, sin(x), 'co', x, cos(x), 'g*');  

 

小整理:plot畫圖函數的叄數 字元 顏色字元 圖線型態y 黃色. 點k 黑色o 圓w 白色x  xb 藍色+ +g 綠色* *r 紅色- 實線c 亮青色: 點線m 錳紫色-. 點虛線-- 虛線 

圖形完畢後,我們可用axis([xmin,xmax,ymin,ymax])函數來調整圖軸的範圍:  

axis([0, 6, -1.2, 1.2]); 

 

此外,MATLAB也可對圖形加上各種註解與處理:  

xlabel('Input Value'); % x軸註解  

ylabel('Function Value'); % y軸註解  

title('Two Trigonometric Functions'); % 圖形標題  

legend('y = sin(x)','y = cos(x)'); % 圖形註解  

grid on; % 顯示格線  

 

我們可用subplot來同一時候畫出數個小圖形於同一個視窗之中:  

subplot(2,2,1); plot(x, sin(x));  

subplot(2,2,2); plot(x, cos(x));  

subplot(2,2,3); plot(x, sinh(x));  

subplot(2,2,4); plot(x, cosh(x));  

 

MATLAB還有其它各種二維畫圖函數,以適合不同的應用,詳見下表。  

小整理:其它各種二維畫圖函數

bar 長條圖

errorbar 圖形加上誤差範圍

fplot 較精確的函數圖形

polar 極座標圖

hist 累計圖

rose 極座標累計圖

stairs 階梯圖

stem 針狀圖

fill 實心圖

feather 羽毛圖

compass 羅盤圖

quiver 向量場圖 

下面我們針對每一個函數舉例。 

當資料點數量不多時,長條圖是非常適合的表示方式:  

close all; % 關閉全部的圖形視窗  

x=1:10;   

y=rand(size(x));   

bar(x,y);  

 

假設已知資料的誤差量,就可用errorbar來表示。下例以單位標準差來做資的誤差量:

x = linspace(0,2*pi,30);   

y = sin(x);  

e = std(y)*ones(size(x));  

errorbar(x,y,e)  

 

對於變化劇烈的函數,可用fplot來進行較精確的畫圖,會對劇烈變化處進行較密集的取樣,例如以下例:  

fplot('sin(1/x)', [0.02 0.2]); % [0.02 0.2]是畫圖範圍  

 

若要產生極座標圖形,可用polar:  

theta=linspace(0, 2*pi);  

r=cos(4*theta);   

polar(theta, r);  

 

對於大量的資料,我們可用hist來顯示資料的分 情況和統計特性。以下幾個命令可用來驗證randn產生的高斯亂數分 :  

x=randn(5000, 1); % 產生5000個 m=0,s=1 的高斯亂數  

hist(x,20); % 20代表長條的個數  

 

rose和hist非常接近,僅僅只是是將資料大小視為角度,資料個數視為距離,並用極座標繪製

表示:  

x=randn(1000, 1);  

rose(x);  

 

stairs可畫出階梯圖:  

x=linspace(0,10,50);  

y=sin(x).*exp(-x/3);  

stairs(x,y);  

 

stems可產生針狀圖,常被用來繪製數位訊號:  

x=linspace(0,10,50);  

y=sin(x).*exp(-x/3);  

stem(x,y);  

 

stairs將資料點視為多邊行頂點,並將此多邊行塗上顏色:  

x=linspace(0,10,50);   

y=sin(x).*exp(-x/3);  

fill(x,y,'b'); % 'b'為藍色  


feather將每個資料點視複數,並以箭號畫出:   

theta=linspace(0, 2*pi, 20);  

z = cos(theta)+i*sin(theta);  

feather(z);  

 

compass和feather非常接近,僅僅是每一個箭號的起點都在圓點:  

theta=linspace(0, 2*pi, 20);  

z = cos(theta)+i*sin(theta);  

compass(z);  

  

基本XYZ立體畫圖命令  


在科學目視表示(Scientific visualization)中,三度空間的立體圖是一個很重要的技巧。本章將介紹MATLAB基本XYZ三度空間的各項畫圖命令。   

mesh和plot是三度空間立體畫圖的基本命令,mesh可畫出立體網狀圖,plot則可畫出立體曲面圖,兩者產生的圖形都會依高度而有不同顏色。

下列命令可畫出由函數<圖片>形成的立體網狀圖:  

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的矩陣  

mesh(xx, yy, zz); % 畫出立體網狀圖  

 

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); % 畫出立體曲面圖  

 

為了方便測試立體畫圖,MATLAB提供了一個peaks函數,可產生一個凹凸有致的曲面,包括了三個局部極大點及三個局部極小點  

要畫出此函數的最快方法即是直接鍵入peaks:  

peaks  

 

z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...  

- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...  

- 1/3*exp(-(x+1).^2 - y.^2)  

我們亦可對peaks函數取點,再以各種不同方法進行畫圖。

meshz可將曲面加上圍裙:  

[x,y,z]=peaks;  

meshz(x,y,z);  

axis([-inf inf -inf inf -inf inf]);  

 

waterfall可在x方向或y方向產生水流效果:  

[x,y,z]=peaks;  

waterfall(x,y,z);  

axis([-inf inf -inf inf -inf inf]);  

 

下列命令產生在y方向的水流效果:  

[x,y,z]=peaks;  

waterfall(x',y',z');  

axis([-inf inf -inf inf -inf inf]);  

 

meshc同一時候畫出網狀圖與等高線:  

[x,y,z]=peaks;  

meshc(x,y,z);  

axis([-inf inf -inf inf -inf inf]);  

 

surfc同一時候畫出曲面圖與等高線:  

[x,y,z]=peaks;  

surfc(x,y,z);  

axis([-inf inf -inf inf -inf inf]);  

 

contour3畫出曲面在三度空間中的等高線:  

contour3(peaks, 20);  

axis([-inf inf -inf inf -inf inf]);  

 

contour畫出曲面等高線在XY平面的投影:  

contour(peaks, 20);  

 

plot3可畫出三度空間中的曲線:  

t=linspace(0,20*pi, 501);   

plot3(t.*sin(t), t.*cos(t), t);  

 

亦可同一時候畫出兩條三度空間中的曲線: 

t=linspace(0, 10*pi, 501);  

plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t);  

 

三維網圖的高級處理


1. 消隱處理

例.比較網圖消隱前後的圖形

z=peaks(50);

subplot(2,1,1);

mesh(z);

title('消隱前的網圖')

hidden off

subplot(2,1,2)

mesh(z);

title('消隱後的網圖')

hidden on

colormap([0 0 1])

2. 裁剪處理

利用不定數NaN的特點,能夠對網圖進行裁剪處理

例.圖形裁剪處理

P=peaks(30);

subplot(2,1,1);

mesh(P);

title('裁剪前的網圖')

subplot(2,1,2);

P(20:23,9:15)=NaN*ones(4,7);       %剪孔

meshz(P)                        %垂簾網線圖

title('裁剪後的網圖')

colormap([0 0 1])                  %藍色網線

 

注意裁剪時矩陣的相應關係,即大小一定要同樣.

3. 三維旋轉體的繪製

為了一些專業用戶能夠更方便地繪製出三維旋轉體,MATLAB專門提供了2個函數:柱面函數cylinder和球面函數sphere

(1) 柱面圖

柱面圖繪製由函數cylinder實現.

[X,Y,Z]=cylinder(R,N)  此函數以母線向量R生成單位柱面.母線向量R是在單位高度裡等分刻度上定義的半徑向量.N為旋轉圓周上的分格線的條數.能夠用surf(X,Y,Z)來表示此柱面.

[X,Y,Z]=cylinder(R)或[X,Y,Z]=cylinder此形式為默認N=20且R=[1 1]

 

例.柱面函數演示舉例

x=0:pi/20:pi*3;

r=5+cos(x);

[a,b,c]=cylinder(r,30);

mesh(a,b,c)

 

例.旋轉柱面圖.

r=abs(exp(-0.25*t).*sin(t));

t=0:pi/12:3*pi;

r=abs(exp(-0.25*t).*sin(t));

[X,Y,Z]=cylinder(r,30);

mesh(X,Y,Z)

colormap([1 0 0])

 

(2)球面圖

球面圖繪製由函數sphere來實現

[X,Y,Z]=sphere(N)             此函數生成3個(N+1)*(N+1)的矩陣,利用函數        surf(X,Y,Z) 可產生單位球面.

[X,Y,Z]=sphere         此形式使用了默認值N=20.

Sphere(N)             僅僅是繪製了球面圖而不返回不論什麼值.

例.繪製地球表面的氣溫分布示意圖.

[a,b,c]=sphere(40);

t=abs(c);

surf(a,b,c,t);

axis('equal')   %此兩句控制坐標軸的大小同樣.

axis('square')

colormap('hot')

 

需要《MATLAB入門教程系列》PDF文檔版的小夥伴,可以在咱們QQ群的群文件裡獲取,下方是QQ群二維碼

(內容來源於網絡,高校FM整理,轉載請保留下方名片)

相關焦點

  • 【教程】MATLAB入門教程系列--圖形處理
    此外,MATLAB也可對圖形加上各種註解與處理:  xlabel('Input Value'); % x軸註解  ylabel('Function Value'); % y軸註解  title('Two Trigonometric Functions'); % 圖形標題  legend('y = sin(x)','y = cos(x)'); % 圖形註解  grid on; % 顯示格線
  • MATLAB入門教程系列--基礎知識
    MATLAB是科學與工程領域研究中必不可少的一個便捷工具,也是我們理工科學生畢業前必會的一項技能,接下來我們將通過三大部分幫助大家快速入門
  • 【仿真計算】Matlab快速入門五分鐘教程(原創)
    Matlab是一款非常簡單易學的數學軟體,擁有強大的矩陣運算、數據處理、圖像繪製等功能,深受廣大師生和工程師喜愛。
  • 數據挖掘Matlab零基礎自學學習路線圖
    matlab功能:數值分析、數值和符號計算、工程與科學繪圖、控制系統的設計與仿真、數字圖像處理、數位訊號處理、通訊系統設計與仿真、財務與金融工程等。Matlab優勢特點編程環境MATLAB由一系列工具組成。這些工具方便用戶使用MATLAB的函數和文件,其中許多工具採用的是圖形用戶界面。包括MATLAB桌面和命令窗口、歷史命令窗口、編輯器和調試器、路徑搜索和用於用戶瀏覽幫助、工作空間、文件的瀏覽器。人機互動性更強,操作更簡單。
  • Mathematica數學入門教程【6】 - 幾何圖形
  • Matlab入門教程 | 010 Matlab 繪圖的萬能公式
    Matlab入門教程 | 008二維作圖:一文講透plot用法。Matlab入門教程 | 009二維作圖:看完此文,所有初等函數的圖像都會畫了!裡面的方法你都實操了嗎?掌握了嗎?gca大概是 get current axes 的縮寫,是指創建或者來到當前圖形的坐標系,有的時候同一個圖形窗口有多個子圖,可能會涉及多個坐標系,用gca指明當前坐標系。hold on 在同一坐標系作一個新圖疊加到舊圖上。
  • 數學建模必備:Matlab常用15大算法+繪圖工具
    本次課程包含內容豐富,各種繪圖工具介紹(數模獲獎論文圖是非常重要的內容,如果沒有數學圖基本無緣獲獎),各種普通算法實現(數據處理、圖像處理、擬合、插值、概率統計),各種智能算法實現(蟻群算法、SVM、神經網絡、遺傳算法、模擬退火、蒙特卡羅)。還有更多更多豐富的工具。「Matlab從入門到算法實踐」系列已經進行了五期。
  • Matlab入門教程 | 第 1 章 Matlab基礎知識之字符串的處理
    1.7 字符串處理1.7.1 字符串的表示在 Matlab 中,字符串是用單引號括起來的字符序列。
  • 幫你快速入門MATLAB
    MATLAB是現如今科學與工程領域研究中必不可少的一個便捷工具,也是許多研究生入學前必會的一個技能,本文將幫助大家快速入門MATLAB。在MATLAB下進行基本數學運算,只需將運算式直接打入提示號(>>)之後,並按入Enter鍵即可。
  • matlab破解版7.0 32位&64位
    matlab7.0破解版可以用於技術計算,其高效的數值計算及符號計算功能,能使用戶從繁雜的數學運算分析中徹底解脫出來。同時matlab7.0破解版具有完備的圖形處理功能,可以實現計算結果和編程的可視化,還可以用於構建自定義的圖形用戶界面。
  • 人生苦短,不如學學MATLAB
    Matlab是集算法開發、數據可視化、數據分析與數值計算於一體的高級技術計算語言和交互環境,在工程計算、機器學習、深度學習、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域都有廣泛應用。
  • Matlab圖像處理系列教程(一)
    灰度化處理就是將一幅色彩圖像轉化為灰度圖像的過程。彩色圖像分為R,G,B三個分量,分別顯示出紅綠藍等各種顏色,灰度化就是使彩色的R,G,B分量相等的過程。灰度值大的像素點比較亮(像素值最大為255,為白色),反之比較暗(像素最下為0,為黑色)。
  • Matlab 2017a 安裝教程
    廣泛地應用於工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。下面就帶來Matlab 2017a 安裝圖文教程。1.右擊解壓如圖所示下載的安裝包12.在安裝路徑中打開R2017a/bin/win64,雙擊打開activate_matlab.exe
  • MATLAB作圖從入門到熟練
    本期推文,喵姐會介紹一下matlab作圖,儘量讓各位同學通過一篇推文學會matlab作圖從入門到熟練。如果你對matlab已經有所了解,可以跳過下面的入門部分。為什麼我們要用MATLAB作圖,而不是用python作圖?這個是工具選擇問題,人與人之間各有偏好。那麼作圖的目的是什麼?是為了清晰地表達數據結果。在數學建模競賽這方面,數據結果表達與論文排版的好壞對論文得分的影響往往很大。
  • MATLAB簡單粗暴教程(十二)——MATLAB常見錯誤提示
    最近疲於工作,本來計劃推出來的畫圖系列只能暫時擱淺,因為第一篇文章還沒有完全完成,對大家說一句不好意思了。本來想搞一個大新聞,但是現在恐怕只有被批判一番了。這一篇文章暫時先簡單介紹一下matlab中常見的錯誤神馬的,算是一個小tips,希望能夠對大家平時的學習神馬的起到幫助。        有很多人問我寫這些教程是為了什麼,我說只是我想寫而已。
  • Matlab教程:nc文件的打開和使用m_map繪製海溫圖
    在大氣科學中,matlab可以用於小規模的科學計算,也可以繪製各類氣象圖,做各種統計運算,功能強大。
  • MATLAB氣象海洋簡單粗暴教程(三十三)——MATLAB裡畫圖的統計函數
    PS 據說二爺的matlab交流微信群每滿100人就會發紅包…加群方式在後面…言歸正傳9.hist3  雙變量柱狀圖用法:hist3(X)X是m*2的矩陣,根據其變量繪製一個X的每一列都代表圖形中的一個維度。 hist3(X,nbins)繪製格子的個數,也就是每個維度等間距劃分為多少區間。Nbins是一個兩個數的數組,分別是兩個維度。 hist3(X,ctrs)ctrs是一個包含兩個數組的元胞,數組元素要求不能降序。兩個數組元素分別表示一維和二維中分組的中心。NaN自動忽略。
  • Matlab擬合詳解
    自己看教程無趣,找不到學習方法,沒有大牛答疑解惑,沒有同伴一起學習…現在,校苑數模旗下在線教育平臺——極值學院,聯合《MATLAB從入門到精通》作者、上市公司高級工程師 董辰輝老師 推出了《MATLAB從入門到算法實踐暑假快班》課程,講師實時互動答疑,保證學習者系統全面的掌握MATLAB。
  • Matlab R2020a軟體安裝破解教程
    MATLAB 產品族可以用來進行以下各種工作:●數值分析●數值和符號計算●工程與科學繪圖●控制系統的設計與仿真●數字圖像處理技術●數位訊號處理技術●MATLAB在通訊系統設計與仿真的應用●通訊系統設計與仿真●財務與金融工程●管理與調度優化計算(運籌學
  • MATLAB圖形保存方法
    Matlab中圖片保存的四種方法:[size=1em]matlab的繪圖和可視化能力是不用多說的,可以說在業內是家喻戶曉的。