MATLAB图形绘制

bai_lan_ya 2024-08-17 09:35:02 阅读 79

一,二维图像绘制

最基础的二维图形绘制方法:plot

-plot命令自动打开一个图形窗口Figure;用直线连接相邻两数据点来绘制图形

-根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标

轴,可把x,y轴用对数坐标表示

如果已经存在一个图形窗口plot命令则清除当前图形,绘制新图

形可单窗口单曲线绘图; 可单窗口多曲线绘图; 可单窗口多曲线分图绘图 ;可多窗口绘图

-可任意设定曲线颜色和线型;可给图形加坐标网线和图形加注功能

1.1.绘制曲线图

plot(X,Y)创建 Y中数据对 x中对应值的二维线图。

如果x和 Y都是向量,则它们的长度必须相同。plot数绘制Y对x的图。

如果x和Y均为矩阵,则它们的大小必须相同。plot函数绘制Y的列对x的列的图。

如果X或Y中的一个是向量而另一个是矩阵,则矩阵的各维中必须有一维与向量的长度相等。

如果矩阵的行数等于向量长度,则 plot 函数绘制矩阵中的每一列对向量的图。

如果矩阵的列数等于向量长度,则该函数绘制矩阵中的每一行对向量的图。

如果矩阵为方阵,则该函数绘制每一列对向量的图。

如果X或Y之一为标量,而另一个为标量或向量,则 plot 函数会绘制离散点。但是,要查看这些

点,您必须指定标记符号,例如 plot(X,Y,'o').

plot(X,Y,Linespec)  设置线型、标记符号和颜色。

plot(X1,Y1,...,Xn,Yn)  绘制多个X、Y对组的图,所有线条都使用相同的坐标区

plot(X1,Y1,Linespec1,...,Xn,Yn,Linespecn)  设置每个线条的线型、标记符号和颜色。您可以混用

X、Y、LineSpec 三元组和 X、Y对组:  例如,plot(X1,Y1,X2,Y2,LineSpec2,X3,Y3)。

plot(Y)创建Y中数据对每个值索引的二维线图,

如果Y是向量,x轴的刻度范围是从1至length(Y)

如果Y是矩阵,则 plot 函数绘制Y中各列对其行号的图。x轴的刻度范围是从1到丫的行数。

如果Y是复数,则 plot 函数绘制Y的虚部对Y的实部的图,使得 plot(Y)等效plot(real(Y),imag(Y))。

plot(y,Linespec)设置线型、标记符号和颜色。

plot(-,Name,Value)使用一个或多个 Name,Value 对组参数指定线条属性。有关属性列表,请参阅

Line 属性。可以将此选项与前面语法中的任何输入参数组合一起使用。名称-值对组设置将应用于

绘制的所有线条。

plot(ax,_)将在由 ax 指定的坐标区中,而不是在当前坐标区(gca)中创建线条。选项 ax 可以位于

前面的语法中的任何输入参数组合之前。

h=plot()返回由图形线条对象组成的列向量。在创建特定的图形线条后,可以使用h修改其属性。有

关属性列表,请参阅 Line 属性。

1.1绘制单条曲线

1.2 绘制多条曲线

 

1.3 绘制多条曲线(利用矩阵)

 

 

能发现矩阵上的数值,对于图像的点的位置 

1.4  绘制指定曲线 

'--'和‘:'都是改变曲线的形状

1.5  绘制指定标记

'b--o' 和'c*'都是用来区分图像的

1.6 在特定点指定标记

1.7 指定线宽,标记大小和颜色

指定线宽、标记大小和标记颜色

<code>x=-pi:pi/10:pi;

y=tan(sin(x))-sin(tan(x));

plot(x,y,'--gs',....

'LineWidth',2,....%线宽

'MarkerSize',10......%线的粗细

'MarkerEdgeColor','b',.....%线的颜色

'MarkerFaceColor',[0.5,0.5,0.5],....

绘制持续时间并指定刻度格式

t=0:seconds(30):minutes(3);

y= rand(1,7);

plot(t,y,'DurationTickFormat','mm:ss')

 

1.8 标记查找表

 示例:

<code>x=linspace(0,10);

y=sin(x);

plot(x,y,'-o','MarkerIndices',1:5:length(y),'LineStyle','-.','MarkerFaceColor','auto','MarkerEdgeColor','none')

1.9 更改颜色的color方法

对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码,

1.RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于[0,1]范围内,例如[0.40.60.7].

2.十六进制颜色代码是字符向量或字符串标量,以井号(#)开头,后跟三个或六个十六进

制数字,范围可以是0到F。这些值不区分大小写。因此,颜色代

码'#FF8800'与'#ff8800'、'#F80'与'#f80'是等效的。

1.10 制作曲线图的步骤

①组合标记

1.在 LineSpec 中可对线性/颜色/标记进行同时指定

2.对于线性/颜色/标记的组合,其是顺序无关的,可随意排列3.注意上述参数都是对曲线进行操作的,如果想更改标记颜色:需利用 Marker 系列参数

②添加标题和轴标签

<code>x=linspace(0,10,150);

y= cos(5*x);

xlabel('x')

ylabel('cos(5x)')

title('2-D ine Plot')

plot(x,y,'Color',[0,0.7,0.9])

③绘制持续时间并指定刻度格式

<code>t=0:seconds(30):minutes(3);

y= rand(1,7);

plot(t,y,'DurationTickFormat','mm:ss')

1.11 hold 方法

hold on 保留当前坐标区中的绘图,从而使新添加到坐标区中的绘图不会删除现有绘图。MATLAB将调整坐标区的范围、刻度线和刻度标签以显示完整范围的数据。如果不存在坐标区,hold 命令会创建坐标区。

hold off将保留状态设置为of,从而使新添加到坐标区中的绘图清除现有绘图并重置所有的坐标区属性。添加到坐标区的下一个绘图基于坐标区的ColorOrder 和LineStyleOrder 属性使用第一个颜色和线型。此选项为默认行为。

<code>x= linspace(-pi,pi);

y1= sin(x);

plot(x,y1)

hold on

y2 = cos(x);

plot(x,y2)

hold off

2,绘制散点图 

①scatter(x,y)在向量x和y指定的位置创建一个包含圆形的散点图。该类型的图形也称为气泡图

②scatter(x,y,sz)指定圆大小。要绘制大小相等的圆圈,请将 sz 指定为标量。要绘制大小不等的圆,请将 sz 指定为长度等于x和y的长度的向量。

③scatter(x,y,s2,c)指定圆颜色。要以相同的颜色绘制所有圆圈,请将c指定为颜色名称或 RGB 三元组。要使用不同的颜色,请将c指定为向量或由 RGB 三元组组成的三列矩阵。

④scatter(_,'fiilled')填充圆形。可以将'filled'选项与前面语法中的任何输入参数组合一起使用。

⑤scatter(___,Name,Value)使用一个或多个名称-值对组参数修改散点图。例如,'Linewidth',2scatter(将标记轮廓宽度设置为 2磅。

⑥scatter(ax,)将在 ax 指定的坐标区中,而不是在当前坐标区中绘制图形。选项 ax 可以位于前面的语法中的任何输入参数组合之前。

⑦s = scatter()返回 Scatter 对象。在创建散点图后,以后可使用s对其进行修改。

⑧scatter(      ,  mkr) 指定标记类型

2.1 步骤

2.1.1创建散点图

<code>x=linspace(0,3*pi,200);

y=cos(x)+rand(1,200);

scatter(x,y);

2.1.2改变点的颜色

<code>x=linspace(0,3*pi,200);

y=cos(x)+rand(1,200);

c=linspace(1,10,length(x));

scatter(x,y,[],c);

 2.1.3 改变点的填充

<code>x=linspace(0,3*pi,200);

y=cos(x)+rand(1,200);

sz=25;

c=linspace(1,10,length(x));

scatter(x,y,sz,c,'filled');

 2.1.4 改变标记符号

<code>theta=linspace(0.2*pi,150);

x=sin(theta)+0.75 * rand(1,150);

y=cos(theta)+0.75 * rand(1,150);

sz=140;

scatter(x,y,sz,'d');

 3,绘制直方图

创建直方图

y=[71 91 105 123.5 131 150 179 203 226 249 281.5];

bar(y);

更改横坐标

<code>X=categorical({'Small','Medium','Large','ExtraLarge'});

X=reordercats(X,{'Small','Medium','Large','ExtraLarge'});

Y=[10 21 33 52];

bar(X,Y);

 绘制直方图

① bar(y)创建一个条形图,y中的每个元素对应一个条形。如果y是 m*n 矩阵,则 bar 创建每组包含n 个条形的 m 个组。

②bar(x,y)在x指定的位置绘制条形。

③bar(    ,width)设置条形的相对宽度以控制组中各个条形的间隔。将 width 指定为标量值。可以将此选项与前面语法中的任何输入参数组合一起使用。

④bar(,style)指定条形组的样式。例如,使用'stacked'将每个组显示为一个多种颜色的条形

⑤bar(_,color)设置所有条形的颜色。例如,使用''表示红色条形。

⑥bar(,Name,Value)使用一个或多个名称-值对组参数指定条形图的属性。仅使用默

认'grouped'或'stacked'样式的条形图支持设置条形属性,在所有其他输入参数之后指定名称-值对

组参数。有关属性列表,请参阅 Bar 属性。

⑦bar(ax,_)将图形绘制到 ax指定的坐标区中,而不是当前坐标区(gca)中。选项 ax 可以位于前面的语法中的任何输入参数组合之前。

4,绘制统计图

根据数据的分布做统计直方图(老版本为hist,新版本为histogram)

histogram(X)基于X创建直方图。histogram 函数使用自动 bin 划分算法,然后返回均匀宽度的 bin,这些 bin 可涵盖x中的元素范围并显示分布的基本形状。histogram 将 bin 显示为矩形,这样每个矩形的高度就表示 bin 中的元素数量。

histogram(X,nbins)使用标量 nbins 指定的 bin 数量。

histogram(x,edges)x划分到由向量 edges 来指定 bin 边界的 bin 内。每个 bin 都包含左边界,但不包含右边界,除了同时包含两个边界的最后一个 bin 外。

histogram('BinEdges',edges,'Bincounts',counts)手动指定 bin 边界和关联的 bin 计数。histogram 绘制指定的 bin 计数,而不执行任何数据的 bin 划分。

histogram(C)(其中C为分类数组)通过为中的每个类别绘制一个条形来绘制直方图。

histogram(c,categories)仅绘制 Categories 指定的类别的子集。

创建统计图

<code>x=randn(10000,1);

histogram(x)

5,绘制饼状图

 pie( x)使用x中的数据绘制饼图。饼图的每个扇区代表x中的一个元素。

如果 sum(X)≤1,x中的值直接指定饼图扇区的面积。如果 sum(X)<1,pie 仅绘制部分饼图,

如果 sum(X)>1,则 pie 通过 X/sum(X)对值进行归一化,以确定饼图的每个扇区的面积。

如果x为 categorical 数据类型,则扇区对应于类别。每个扇区的面积是类别中的元素数除以 X中的元素数的结果。

pie(X,explode)将扇区从饼图偏移一定位置。explode 是一个由与x对应的零值和非零值组成的向量或矩阵。pie 函数仅将对应于 explode 中的非零元素的扇区偏移一定的位置。如果x为 categorica1 数据类型,则 explode 可以是由对应于类别的零值和非零值组成的向量,或者是由要偏移的类别名称组成的元胞数组。

pie(X,labels)指定用于标注饼图扇区的选项。在本例中,x必须为数值。

pie(X,explode,labels)偏移扇区并指定文本标签。X可以是数值或分类数据类型。

示例;

<code>X=1:3;

labels={'Taxes','Expenses','Profit'};

pie(X,labels)

6,绘制阶梯图

stairs(Y)绘制Y中元素的阶梯图。

如果Y为向量,则 stairs 绘制一个线条。

如果Y为矩阵,则 stairs 为每个矩阵列绘制一个线条。

stairs(X,Y)在Y中由x指定的位置绘制元素。输入x和Y必须是相同大小的向量或矩阵。另外,X可以是行或列向量,Y必须是包含 1ength(X)行的矩阵。

stairs(_,Linespec)指定线型、标记符号和颜色。例如,':*r'指定带星号标记的红色点线。可以将此选项与前面语法中的任何输入参数组合一起使用。

stairs(      ,Name,Value)使用一个或多个名称-值对组参数修改阶梯图。

例如,'Marker','o','Markersize',8 指定大小为 8 磅的圆形标记。

7,阶梯图

<code>X=linspace(0,4*pi,40);

Y=sin(X);

stairs(Y);

 8,绘制极坐标图

根据数据做极坐标图(老版本为polar,新版本为polarplot)

polarplot(theta,rho)在极坐标中绘制线条,由 theta 表示弧度角rho 表示每个点的半径值。输入必须是长度相等的向量出大小相等的矩阵。如果输入为矩阵,polarplot 将绘制 rho 的列对 theta的列的图。也可以一个输入为向量,另一个为矩阵,但向量的长度必须与短阵的一个维度相等。

polarplot(theta,rho,Linespec)设置线条的线型、标记符号和颜色。polarplot(theta1,rho1,...,thetaN,rhoN)绘制多个 rho,theta 对组。

polarplot(theta1,rho1,Linespec1,...,thetaN,rhoN,LinespecN)指定每个线条的线型、标记符号和颜色

po1arplot(rho)按等间隔角度(介于0和2π 之间)绘制rho 中的半径值。

polarplot(rho,LineSpec)设置线条的线型、标记符号和颜色.

polarplot(Z)绘制z中的复数值。

polarplot(2,LineSpec)设置线条的线型、标记符号和颜色。

polarplot(,Name,Value)使用一个或多个 Name,Value 对组参数指定图形线条的属性。属性设

创建极坐标

<code>theta=0:0.01:2*pi;

rho=sin(2*theta).*cos(2*theta);

polarplot(theta,rho);

9,绘制区域图

①area(X,Y)绘制Y中的值对x坐标x的图。然后,该的数根据Y的形状填充曲线之间的区域

②如果Y是向量,则该图包含一条曲线。area填充该曲线和水平轴之间的区域,

③如果丫是矩阵,则该图对v中的每列都包含一条曲线。area 填充这些曲线之间的区域并堆叠它们,从而显示在每个x坐标处每个行元素在总高度中的相对量。

④area(Y)绘制Y对一组隐式x坐标的图,并填充曲线之间的区域如果Y是向量,则x坐标范围从1到length(Y)

⑤如果Y是矩阵,则x坐标的范围是从1到Y中的行数。

⑥area(basevalue)指定区域图的基准值。basevalue 对应于水平基线。area 填充曲线和这条线之间的区域。将 basevalue 指定为上述任一语法中的最后一个参数。

⑦area(   ,Name,Value)使用一个或多个名称-值对组参数修改区域图的属性。这些属性适用于所有显示区域。例如,'linestyie',…’为绘图指定虚线线型,需要在上述任一语法中的所有参数之后指定名称·值对组

⑧area(ax,-)在目标坐标区上显示区域图。将坐标区指定为上述任一语法中的第一个参数

⑨ area(_)返回一个或多个 Area 对象。对象的数量等于绘制区域的数量,创建区域后,使用a修改区域的属性。

10,子窗口

subplot(m,n,p)将当前图窗划分为mxn网格,并在p指定的位置创建坐标区MATLAB 按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。如果指定的位置已存在坐标区,则此命令会将该坐标区设为当前坐标区。

*若mnp均为一位数时,逗号可忽略

<code>subplot(2,2,1);

x=linspace(-3.8,3.8);

y_cos =cos(x);

plot(x,y_cos);

title('Subplot 1 : Cosine')

subplot(2,2,2);

y_poly=1-x.^2./2 + x.^4./24;

plot(x,y_poly,'g');

title('Subplot 2 : Polynomial')

subplot(2,2,[3,4]);

plot(x,y_cos,'b',x,y_poly,'g');

title('Subplot 3 and 4: Both')

 二,三维图像绘制

创建三维曲线图

<code>t=0:pi/500:40*pi;

xt=(3+cos(sqrt(32)*t)).*cos(t);

yt=sin(sqrt(32)*t);

zt=(3+cos(sqrt(32)*t)).*sin(t);

plot3(xt,yt,zt)

axis equal

xlabel('x(t)')

ylabel('y(t)')

zlabel('z(t)')

绘制散点图

①scatter3(x,Y,Z)在向量X、Y和z指定的位置显示圆圈。

②scatter3(X,Y,Z,S)使用s指定的大小绘制每个圆圈。要绘制大小相等的圆圈,请将s指定为标量。要绘制具有特定大小的每个圆,请将S指定为向量

③scatter3(X,Y,Z,S,C)使用c指定的颜色绘制每个圆圈,

如果C是 RGB 三元组,或者是包含颜色名称的字符向量或字符串,则使用指定的颜色绘制所有圆

如果C是一个三列矩阵,其中C中的行数等于X、Y和z的长度,则c的每行指定相应圆圈的RGB 颜色值。

如果C是长度与 X、Y和z的长度相同的向量,则C中的值线性映射到当前颜色图中的颜色。

④scatter3(,'filled')使用前面的语法中的任何输入参数组合填充这些圆。

⑤scatter3(_,markertype)指定标记类型。

⑥scatter3(_,Name,Value)使用一个或多个名称-值对组参数修改散点图。

绘制直方图

创建直方图

<code>load count.dat

Z=count(1:10,:);

width=0.5;

bar3(Z,width);

title('Bar Width of 0.5')

绘制曲面图

<code>[X,Y]=meshgrid(-5:.5:5);

Z=Y.*sin(X)-X.*cos(Y);

s=surf(X,Y,Z,'FaceAlpha',0.5);

其他图像跟二维知识点相似,知识函数名变为plot3()

mesh/surf

示例:

<code>[X,Y]=meshgrid(-8:.5:8);

R=sqrt(X.^2 + Y.^2)+eps;

Z=sin(R)./R;

subplot(121)

mesh(X,Y,Z)

subplot(122)

surf(X,Y,Z)

 mesh:采用彩色的线条为基础,在其中填补白色的面

surf:采用彩色的面为基础,在其中填黑色的线条

任意散点作图

<code>load('Point.mat');

x=A(:,1);

y=A(:,2);

z=A(:,3);

[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4');

surf(X,Y,Z);

绘制等高线图

 contour(z)创建一个包含矩阵Z的等值线的等高线图,其中Z包含x-y平面上的高度值

MATLAB会自动选择要显示的等高线。Z的列和行索引分别是平面中的x和y坐标。

contour(x,Y,Z)指定z中各值的x和y坐标。

 

contour(   ,levels)将要显示的等高线指定为上述任一语法中的最后一个参数。将 levels 指定为标量值 n,以在n个自动选择的层级(高度)上显示等高线。要在某些特定高度绘制等高线,请将levels 指定为单调递增值的向量。要在一个高度(k)绘制等高线,请将 levels 指定为二元素行向量[k k].

contour(_,LineSpec)指定等高线的线型和颜色,

contour(_,Name,Value)使用一个或多个名称-值对组参数指定等高线图的其他选项。请在所有其他输入参数之后指定这些选项。

contour(ax,_)在目标坐标区中显示等高线图。将坐标区指定为上述任一语法中的第一个参数。

M =contour(_)返回等高线矩阵 M,其中包含每个层级的顶点的 (x, y) 坐标。

[M,c]=contour(_)返回等高线矩阵和等高线对象c。显示等高线图后,使用c设置属性。

示例:

x=-2:0.2:2;

y=-2:0.2:3;

[X,Y]=meshgrid(x,y);

Z=X.*exp(-X.^2-Y.^2);

contour(X,Y,Z,'ShowText','on')

等高线无法反映图像的全部细节时,可采用view方法进行投影

<code>[X,Y,Z]=peaks;

subplot(121)

surf(X,Y,Z)

subplot(122)

surf(X,Y,Z)

view(2)

绘图常用命令

 *hold on/hold off                    保持/不保持图像

*colorbar                                 颜色栏

*xlim([x1,x2])/ylim                    更改坐标轴范围

*xlabel/ylabel                          增加 坐标轴标签

*title                                        增加图像标题

*axis on/aixs off                      打开/关闭坐标轴

*text(x,y 'str')                          在(x,y)处添加文字

*quiver(xl,yl.x2,y2)                 生成(x1,y1)到(x2,y2)的箭头

句柄方法

gcf 返回当前Figure 对象的句柄值

gca 返回当前axes 对象的句柄值

gco 返回当前鼠标单击的句柄值

<code>plot(0:0.01:10,sin(0:0.01:10))

xlabel('x(mm)')

ylabel('y(mm)')

set(gca,'FontName','Times New Roman','Fontsize',14)

通过建立图像句柄,对图像中的文字进行修改*注意gca区分子窗口,若采用subplot需对每个sub获取句柄进行操作

示例:

<code>x=linspace(-2*pi,2*pi);

y1=sin(x);

y2=cos(x);

p=plot(x,y1,x,y2);

p(1).LineWidth=2;

p(2).Marker='*';code>

通过建立图像句柄,对第一条曲线的线宽与第二条曲线的标识进行修改*句柄能调用的特性,必须是图像所拥有的特性 

三,matlab动画

窗口控制 

文件保存 



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。