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

2021-02-19 天大神經工程

基本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入門教程系列--圖形處理
    前面推送了兩篇MATLAB入門教程系列文章,今天是這個系列文章的最後一篇,我們一起看看MATLAB強大的圖形處理能力。
  • 【仿真計算】Matlab快速入門五分鐘教程(原創)
    Matlab是一款非常簡單易學的數學軟體,擁有強大的矩陣運算、數據處理、圖像繪製等功能,深受廣大師生和工程師喜愛。
  • Mathematica數學入門教程【6】 - 幾何圖形
  • MATLAB入門教程系列--基礎知識
    MATLAB是科學與工程領域研究中必不可少的一個便捷工具,也是我們理工科學生畢業前必會的一項技能,接下來我們將通過三大部分幫助大家快速入門
  • Matlab入門教程 | 010 Matlab 繪圖的萬能公式
    Matlab入門教程 | 008二維作圖:一文講透plot用法。Matlab入門教程 | 009二維作圖:看完此文,所有初等函數的圖像都會畫了!裡面的方法你都實操了嗎?掌握了嗎?gca大概是 get current axes 的縮寫,是指創建或者來到當前圖形的坐標系,有的時候同一個圖形窗口有多個子圖,可能會涉及多個坐標系,用gca指明當前坐標系。hold on 在同一坐標系作一個新圖疊加到舊圖上。
  • Matlab 2017a 安裝教程
    廣泛地應用於工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。下面就帶來Matlab 2017a 安裝圖文教程。1.右擊解壓如圖所示下載的安裝包12.在安裝路徑中打開R2017a/bin/win64,雙擊打開activate_matlab.exe
  • 【技術幹貼】FRAGSTATS 4 官方入門教程 教程1 [中文版]
    原著:Kevin McGarigal翻譯:地理時政志(公眾號、CSDN同名,知乎:Jarviski)FRAGSTATS的官網上有原作者給出的一個很好的軟體入門教程
  • MATLAB簡單粗暴教程(十二)——MATLAB常見錯誤提示
    最近疲於工作,本來計劃推出來的畫圖系列只能暫時擱淺,因為第一篇文章還沒有完全完成,對大家說一句不好意思了。本來想搞一個大新聞,但是現在恐怕只有被批判一番了。這一篇文章暫時先簡單介紹一下matlab中常見的錯誤神馬的,算是一個小tips,希望能夠對大家平時的學習神馬的起到幫助。        有很多人問我寫這些教程是為了什麼,我說只是我想寫而已。
  • MATLAB 2018b for Mac 下載及安裝教程
    MATLAB廣泛應用在信號處理和通信、圖像和視頻處理、控制系統、測試和測量、計算金融學及計算生物學等眾多應用領域。本文提供了適用於Mac OS系統的免費版本MATLAB R2018b Mac,如需正版軟體,可以使用教育郵箱前往官網進行申請。
  • Matlab入門教程 | 006編程示例:計算e的近似值
    很多入門書偏重於理論介紹,讀起來好比陷入了概念術語的汪洋大海,看不到岸,令人灰心,只好望洋興嘆!可是,如果我們掌握了科學的學習方法,一點都不難!科學的學習方法就是從實例入手,通過對一個一個實例,跑代碼,舉一反三進行實操,循序漸進掌握基本命令用法和編程思想。
  • 【教程】html+css零基礎入門教程(九)
    注意,如果沒有使用這些關鍵詞,至少要指定字體大小和字體系列。有兩種類型的字體系列名稱:1) 指定的系列名稱:具體字體的名稱,比如:"times"、"courier"、"arial"。2) 通常字體系列名稱:比如:"serif"、"sans-serif"、"cursive"、"fantasy"、"monospace"p{ font-family:"Times New Roman",Georgia,Serif; }提示:使用逗號分割每個值,並始終提供一個類族名稱作為最後的選擇。
  • 【Blender】青之巔翻譯-Blender入門系列教程,開坑!
    在翻譯了將近一年的C4D相關內容之後,有很多小夥伴,包括一些業內大佬,都建議我翻譯一些Blender的教程。因此,木木在對Blender這一3D軟體進行了一個基本了解和教程摸底之後,將從今天開始,翻譯由Blender官方錄製的Blender Foundamental 入門級系列教程。
  • Bootstrap系列入門教程
    目錄如下:Bootstrap教程(1)--為何要學習BootstrapBootstrap教程(2)--安裝BootstrapBootstrap教程(3)--容器與網格Bootstrap教程(4)--開發標準的響應式網頁Bootstrap教程(5)--使用標籤、徽章、巨幕、WellBootstrap教程(6)--使用面板
  • Python數據處理庫pandas入門教程
    本文是對它的一個入門教程。pandas提供了快速,靈活和富有表現力的數據結構,目的是使「關係」或「標記」數據的工作既簡單又直觀。它旨在成為在Python中進行實際數據分析的高級構建塊。建議讀者先對NumPy有一定的熟悉再來學習pandas,我之前也寫過一個NumPy的基礎教程,參見這裡:Python 機器學習庫 NumPy 教程核心數據結構pandas最核心的就是Series和DataFrame兩個數據結構。
  • Matlab R2019b安裝教程
    可以進行矩陣運算、繪製函數和數據、實現算法、創建用戶界面、連接其他程式語言的程序等,主要應用於工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。Matlab R2019b新增功能:1.涵蓋了一系列的MATLAB和Simulink新功能,包括對人工智慧、深度學習和汽車行業的支持。
  • 時間序列預測教程;OpenAI 談對抗樣本:自然語言處理入門 | AI 開發...
    這是澳大利亞機器學習專家 Jason Brownlee 撰寫的教程,提供了一套用 Python 語言處理時間序列預測問題的模板。該教程一步步向讀者展示了應該用什麼工具、如何操作,以及為什麼這樣操作。全文包含代碼長達兩萬字,是迄今為止最權威、最詳細的時間序列預測入門教程之一。具有相當學習價值。
  • 「教程分享」Jmeter入門教程
    回歸學長每周的教程分享!啟動後可以看到一個java編寫的圖形界面。四、一個簡單的壓測實例現有一個http請求接口http://localhost:8080/goods/to_list,要使用Jmeter對其進行壓測,測試步驟如下:a.新建一個線程組。
  • 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的函數和文件,其中許多工具採用的是圖形用戶界面。包括MATLAB桌面和命令窗口、歷史命令窗口、編輯器和調試器、路徑搜索和用於用戶瀏覽幫助、工作空間、文件的瀏覽器。人機互動性更強,操作更簡單。
  • 【教程】html+css零基礎入門教程(十)
    如:p{direction:inherit}頁面上顯示為 F2E.TMINGCSS文本 - word-break 屬性word-break 屬性規定自動換行的處理方法。提示:通過使用 word-break 屬性,可以讓瀏覽器實現在任意位置的換行。