第三章 Matlab绘图及视频读写
3.1 散点图
3.1.1 基于scatter函数的二维散点图
给定平面上的n个不同点的直角坐标(Xi,Yi)(i=1,2,......,n),两个坐标分量组成的向量分别用向量x和y表示。使用scatter函数绘制散点图,常用的3种格式如下:
scatter(x,y),scatter(x,y,sz),scatter(x,y,sz,c)
每个离散点默认用圆圈表示。在第二种格式中,sz表示圆圈大小,若s为标量,则所有圆圈大小相同;若sz为n维向量,则其分量值越大,圆圈越大。在第三种格式中,c表示颜色,当c为n维向量时,其分量取值越大,对应圆圈的颜色越红,反之越蓝;当c为1*3维向量时,它的分量分别表示R、G、B的值,这里RGB分别表示3种颜色red、green、blue。
a=rand(3)
b=rand(2,3)
save mydatal a b %保存一个以maydatal为名字的mat文件
load mydatal %将文件变量加载到工作区
load mydatal.mat %将文件变量加载到工作区
load('mydatal.mat') %将文件变量加载到工作区
subplot(121) %打开一行二列的第一个窗口进行操作
scatter(x,y)
subplot(122) %打开一行二列的第一个窗口进行操作
scatter(x,y,[],z)
实例分析:
clc ,clear
load seamount %加载Matlab内置文件seamount.mat
subplot(121),scatter(x,y,20,z) %圆圈大小为20
title('(A)s=20') %设置大标题
xlabel('$x$','Interpreter','Latex') %设置x轴
ylabel('$y$','Interpreter','Latex','Rotation',0) %设置y轴
subplot(122),scatter(x,y,30,'fill')
title('(A)s=30') %设置大标题
xlabel('$x$','Interpreter','Latex') %设置x轴
ylabel('$y$','Interpreter','Latex','Rotation',0) %设置y轴
3.1.2 基于scatter3的函数的三维散点图
在三维空间,n个点构成的横坐标,纵坐标和竖坐标向量分别为x,y,z,则绘制散点图的函数为scatter3,它的常用格式为
scatter3(x,y,z),scatter3(x,y,z,sz),scatter3(x,y,z,sz,c),其中sz和c的意义与scatter中的意义相同
实例分析:
clc,clear
load seamount.mat %加载Matlab内置文件seamount.mat
scatter3(x,y,z,30,z,'fill')
xlabel('$x$','Interpreter','Latex') %设置x轴
ylabel('$y$','Interpreter','Latex') %设置y轴
zlabel('$z$','Interpreter','Latex','Rotation',0) %设置z轴
注:scatter和scatter3默认用圆圈表示点,当然也可以用三角形、正方形、菱形、五角星和六角星等封闭符号来表示。若在scatter和scatter3中使用了fiied,则不建议使用非封闭的加号、黑点、叉号和星号等等符号。
3.2 基于plot函数的散点图和平面曲线绘制
已知二维平面上的n个点,构成的x坐标和y坐标向量分别为x,y,把这n个点按照先后顺序用线段相连,就得到过这n个点的折线图。Matlab无法绘制真正意义上的曲线,实际绘制的都是折线图;如果相邻两点之间不连线段,则绘制出散点图。
plot函数是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的,可以绘制线段和曲线。函数plot的最典型调用方式是三元组形式:
plot(x,y,'Color|Linestyle|Marker')
其中x,y为同维数的向量(或矩阵),x作为点的横坐标,y作为点的纵坐标,plot命令用直线连接相邻两数据点绘制图形。Color、Linestyle和Marker分别是颜色、线型和数据点标记,它们之间没有先后顺序之分。
常用的颜色、线型和数据点符号如表所示
颜色符号 | 颜色 | 线型符号 | 线型 | 数据点符号 | 标记 |
b(默认) | 蓝色 | -(默认) | 实线 | + | 十字 |
r | 红色 | : | 短虚线 | * | 星号 |
y | 黄色 | -- | 长虚线 | 0 | 圆圈 |
g | 绿色 | -. | 点划线 | X | 叉号 |
c | 蓝绿色 | s | 正方形 | ||
m | 紫红色 | d | 菱形 | ||
k | 黑色 | p | 五角星 | ||
w | 白色 | h | 六角形 |
画二维曲线图时,当知道曲线的函数表达式时,可以使用2种方式画图:
(1) 用描点画图命令plot
(2)用函数画图命令fplot
示例1:
clc,clear,close all
load seamount
subplot(121),plot(x,y,'ro') %绘制二维散点图
title('(A)二维散点图')
subplot(122),plot3(x,y,z,'bo')%绘制三维散点图
注!!!:此时未指明线型符号,所以没有连线
示例2:
clc,clear,close all
t=0:1:2*pi;
x=cos(t);y=sin(t);
plot(x,y),axis square
figure %再开辟一个图形窗口
x=@(t)cos(t);y=@(t)sin(t);
fplot(x,y,[0,2*pi]),axis equal %[0,2*pu=i]为x的取值范围
示例3:画出单位圆的内接八边形
clc,clear, close all
t1=linspace(0,2*pi); %等间距取100个值
x1=cos(t1);y1=sin(t1);
plot(x1,y1) %化单位圆
hold on %图形保持
t2=linspace(0,2*pi,9) %等间距取9个不同点,0和2*pi对应的点重合
x2=cos(t2);y2=sin(t2);
plot(x2,y2,'.k-'),axis square
3.3 三维绘图命令
MATLAB也提供了一些三维基本画图命令,如三维曲线命令plot3,三维网格图命令mesh和三维表面图命令surf.
plot3(x,y,z)通过描点连线画出曲线,这里x,y,z分别表示数据点的横坐标、纵坐标和竖坐标,如果x和y是向量,x是m维的向量,y是n维的向量,则z是n*m维的向量,则z是n*m的矩阵。x,y,z也可以都是同维数的矩阵,命令mesh(x,y,z)将该数据点在空间中描出,并连成网格图。命令surf(x,y,z)画出三维表面图,这里x,y,z分别表示数据点的横坐标、纵坐标和竖坐标。
已知曲线或曲面的函数关系,提倡使用fplot3,fmesh,fsurf等命令画图。
三维空间的隐函数绘图命令为fimplicit3
示例1 画出三维螺旋线 x=tcost,y=tsint,z=t的图形
clc,clear
t=0:0.01:100;
x=t.*cos(t);
y=t.*sin(t);
subplot(121),plot3(x,y,t)
x=@(t)t.*cos(t);
y=@(t)t.*sin(t);
z=@(t)t;
subplot(122),fplot3(x,y,z,[0,100])
示例2 绘制出/4+
/2=
的网格曲线图
clc,clear,close all
subplot(121)
x=@(t,z)2*z.*cos(t);
y=@(t,z)sqrt(2)*z*sin(t);
z=@(t,z)z;
fsurf(x,y,z,[0,2*pi,-5,5]),title('') %[0,2*pi]为t的取值范围,[-5,5]为z的取值范围
subplot(122)
fimplicit3(@(x,y,z)x.^2/4+y.^2/2-z.^2,[-10,10,-10,10,-5,5])
示例3 莫比乌斯环
注!!!:fplot3输入必须为一个或多个包含单个变量的函数。
clc,clear,close all
x=@(s,t)(2+(s/2).*cos(t/2)).*cos(t);
y=@(s,t)(2+(s/2).*cos(t/2)).*sin(t);
z=@(s,t)(s/2).*sin(t/2);
fmesh(x,y,z,[-1,1,0,2*pi])
附:contour(x,y,z) --矩阵的等高线图
作用:此 MATLAB 函数 创建一个包含矩阵 Z 的等值线的等高线图,其中 Z 包含 x-y 平面上的高度值。MATLAB 会自动选择要显示的等高线。Z的列和行索引分别是平面中的 x 和 y 坐标。