前兩天,我們在MATLAB入門(上)的推文中簡單認識了MATLAB,了解了MATLAB的基礎知識,今天繼續從檔案讀取、MATLAB繪圖兩個方面給大家介紹。
一、檔案讀取
1. 工作空間資料讀取
在MATLAB中可以将工作空間的變量儲存為檔案,可以從檔案中導入資料儲存為變量,常用指令為save函數。
save:将目前工作區的所有變量以二進制格式儲存到檔案matlab.mat檔案張總,不同類型的資料按照對應的最大精度儲存,并儲存對應的變量名稱。
save('filename'):将檔案儲存到目前目錄下,檔案名為filename.mat,如需要儲存到其他目錄下,需需要添加檔案路徑。
save('filename','var1','var2'):将工作空間内指定變量儲存到檔案filename.mat中。
load:加載matlab.mat中所有的變量,如果檔案不存在則傳回錯誤。
load filename:加載指定檔案filename中的所有變量,加載時根據檔案字尾确定檔案的讀入方式。
2. 文本檔案讀取
A = fread(fid):通過檔案指針讀入二進制格式檔案,讀入的資料存放在數組A中,讀入資料的過程中,檔案指針從頭到尾,可用feof檢測。
A = fread(fid,count):讀入count個數組元素,fread讀入後,檔案指針定位于讀入位元組的下一位元組處,後續讀入的位元組從此開始。
A = fread(fid,count,precision,skip):以precision指定的精度讀入資料,skip可以選擇跳過若幹個字元。
3. 常用的資料導入和導出函數
dlmread:從分隔文本檔案中讀入資料
dlmwrite:将資料寫入分隔文本檔案
textread:從檔案中讀入格式化文本
textscan:利用fopen函數打開檔案後,讀入格式化檔案
xlsread:讀入電子表格中的資料
imread:從圖像檔案中讀入資料
imwrite:将資料寫入圖像檔案
aviread:從avi檔案中讀入資料
4. 圖像檔案的讀入和輸出
圖像檔案讀入可以通過imread函數來實作,該函數隻支援多種格式的圖像檔案,包括BMP、CUP、GIF、HDF、ICO、JPG、PBM、PCX、PGM、PNG、PNM、PPM、RAS、TIF、XWD。
A = imread(filename,fmt):從filename中讀入圖像檔案,如果圖像檔案不在目前目錄,則需要指出路徑,fmt為圖像檔案格式
[X,map] = imread(filename,fmt):将位圖檔案讀入到X中,相關的顔色資料讀入到map中,顔色資料在[0,1]之間變化。
[~] = imread(URL,filename):從網絡中導入圖檔,url為網址
圖像檔案輸出可以通過imwrite函數來實作,支援的圖像檔案格式包括BMP、CUP、GIF、HDF、ICO、JPG、PBM、PCX、PGM、PNG、PNM、PPM、RAS、TIF、XWD。
imwrite(A,filename,fmt):将圖像A以指定的圖像格式fmt寫入filename檔案中,A可以是m*n的灰色圖像,也可以是m*n*3的彩色圖像。
imwrite(X,map,filename,fmt):将X中的位圖和相關的色彩映像以指定的格式fmt寫入檔案中。
%繪制圖像
x = 0:pi/12:2*pi;
plot(sin(x),cos(x),'color','blue','linewidth',5,'marker','d');
axis square
PS.Color = [0.7,0.7,0];
PS.LineWidth = 2;
line(sin(7*x),cos(7*x),PS)
[X,map] = imread('figure','jpg');
imshow(X,map)
imwrite(X,'figure_new','jpg')
二、MATLAB繪圖
1.二維圖形繪制
plot函數是Matlab繪制二維圖形的常用函數,該函數将數組中的資料點繪制在坐标平面上,通過直線将這些點連起來構成一條連續的曲線。主要的指令格式如下:
1、plot(x,'PropertyName',PropertyValue)
x表示繪制圖表的資料,Property表示屬性的字元選項,PropertyValue表示相應的選值。
當x是一維數組時,以數組元素的下标為橫坐标,元素數值為縱坐标繪制曲線;
當x為二維數組時,數組的每列數組元素為總坐标,數組下标為橫坐标繪制多條曲線。
2、plot(x,y,'PropertyName',PropertyValue)
當x和y為同維數組時,分别以x和y為橫縱坐标繪制曲線,
x為一維數組,y為矩陣時,y的某一次元與x次元相等,繪制多條曲線;
x和y都為矩陣時,分别以對應的x和y為橫縱坐标,曲線條數與矩陣列數相等。
3、plot(x1,y1,x2,y2,'PropertyName',PropertyValue)
在視窗中同時繪制以x1和y1,x2和y2等分别為橫縱坐标的曲線。
%plot函數繪圖示例
%生成一維數組及參數數組
a = 0:0.1:1;
t = 0:0.01:1;
%生成二維數組
y = sin(3*t').*exp(-t')*a;
%figure1:二維數組繪制曲線
subplot(2,2,1)
axis([0,100,0,1]);
xlabel('index');ylabel('y');
title('figure1');
%figure2:一維數組和二維數組繪制曲線
subplot(2,2,2)
axis([0,1,0,1]);
xlabel('t');ylabel('y');
title('figure2');
%figure3:二維數組和一維數組繪制曲線
subplot(2,2,3)
axis([0,1,0,1]);
2. 線型、标記和顔色
MATLAB中常見的線型、标記符、顔色如下圖所示。
%plot函數參數示例
%生成一維數組
t = 0:pi/20:3*pi;
%生成因變量數組
y = exp(-t/3).*sin(2*t+3);
y1 = exp(-t/3);
%繪制曲線
plot(t,y,'b:*',t,y1,'r-')
xlabel('t');ylabel('y');
title('Linestyle and markers');
legend('y=exp(-t/3).*sin(2*t+3)','y1=exp(-t/3)');
3. 三維曲線繪制
plot3函數是Matlab繪制三維曲線的常用函數,輸入參數時,需要輸入第三個參數數組。
plot(x,y,z,LineSpec,'PropertyName',PropertyValue)
如果x,y和z是同維數組(向量、矩陣),分别以對應列作為x、y和z坐标,曲線的個數等于矩陣列維。
%plot3函數繪圖示例
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t,'r*-');
xlabel('sin(t)');ylabel('cos(t)');zlabel('t');
title('figure1:helix');
%繪制多條曲線
x = linspace(0,3*pi,200);
z1 = sin(x); z2 = sin(2*x); z3 = sin(3*x);
y1 = zeros(size(x)); y2 = ones(size(x));
y3 = 2*ones(size(x));
plot3(x,y1,z1,'r*',x,y2,z2,'bp',x,y3,z3,'mx');
xlabel('x');ylabel('y');zlabel('z');
title('figure2:sin(x),sin(2x),sin(3x)');
4. 網格與曲面圖繪制
三維網格圖相當于在x-y平面上的z坐标定義一個網格面,相鄰的點通過直線連接配接,網格節點就是z的資料點,在Matlab中通過mesh函數實作。
mesh(z):以z矩陣的列和行的下标為x和y軸的自變量繪制網格圖;
mesh(x,y,z):x和y為自變量矩陣,z為建立在x和y之上的函數矩陣;
與mesh函數相比,surf函數使曲面上的所有網格都填充了顔色,指令格式與mesh函數類似。但提供了平面陰影和插值陰影。
%mesh函數繪圖示例
x = 0:pi/20:2*pi;
y = 0:pi/20:2*pi;
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
mesh(X,Y,Z)
xlabel('X');ylabel('Y');zlabel('Z');
title('figure1');
xlabel('X');ylabel('Y');zlabel('Z');
title('figure2');
%surf函數繪圖示例
x = 0:pi/20:2*pi; y = 0:pi/20:2*pi;
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
surf(X,Y,Z)
shading flat
xlabel('X');ylabel('Y');zlabel('Z');
title('figure1');
shading interp
xlabel('X');ylabel('Y');zlabel('Z');
title('figure2');
5. 等值線繪制
等值線圖能夠将具有相同數值的點連起來繪制相等數值的曲線或曲面,常用的MATLAB繪制等值線圖函數的指令格式為:
contour(z):繪制z所表達的等值線圖
coutour(z,n):參數n為所需要繪制的等值線圖的數目
contour(z,v):向量v定義了等值線的數目和數值
%等值線繪圖示例
x = 0:pi/20:2*pi;
y = 0:pi/20:2*pi;
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
surf(X,Y,Z)
shading interp;
contour(X,Y,Z,-2:0.4:2)
xlabel('X');ylabel('Y');
title('二維等值線圖');
contour3(X,Y,Z,60)
xlabel('X');ylabel('Y');zlabel('Z');
title('三維等值線圖');
6. 顔色表示等值線
%顔色表示等值線繪圖示例
x = 0:pi/20:2*pi;
y = 0:pi/20:2*pi;
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
surf(X,Y,Z)
shading interp;
contourf(X,Y,Z,20)
7. 特殊圖形繪制
(1)餅圖繪制
pie(x):繪制向量x的餅圖,x中的每一個元素就是餅圖中的每一個扇形部分。
pie(x,explode):參數explode和x是同維數組,如果explode中有非零元素,x數組中對應元素唉餅圖中将向外移出元素數值大小,加以突出。
pie(~,labels):參數labels表示餅圖上的扇形。
%餅圖繪制示例
%向量參數設定
x = [1,3,0.5,2.5,2];
explode = [1,0,0,0,0];
subplot(1,2,1)
pie(x,explode,{'a','b','c','d','e'});
title('二維餅圖')
subplot(1,2,2)
pie3(x,explode);
title('三維餅圖')
(2)直方圖和梯形圖
bar(y):為一維數組y的每個元素繪制一個條形。
bar(x,y):在橫坐标向量x上繪制直方圖y,x向量需要按照遞增的方式排列。
bar(~,width):width用于設定直方圖條形的相對寬度和條形之間間距。
hist(y,n):表示數組y中值的分布情況,n表示柱狀圖中柱的數量,預設為10個。
%繪制直方圖和柱形圖
x = -3:0.3:3;
y = exp(-x.^2);
bar(x,y,0.8);
xlabel('x');ylabel('y')
bar3(x,y,0.9)
xlabel('x');ylabel('y')
y = randn(1,10000);
相關推文: