前两天,我们在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);

相关推文: