MATLAB图形绘制.docx
《MATLAB图形绘制.docx》由会员分享,可在线阅读,更多相关《MATLAB图形绘制.docx(42页珍藏版)》请在冰豆网上搜索。
MATLAB图形绘制
MATLAB作为一个强大的绘图工具,有很强的绘图功能,不仅可以绘制普通函数的二维、三维甚至思维图形,而且可以绘制专业图像,如直方图、饼图等。
一、MATLAB二维绘图
MATLAB提供了多个函数用于图形绘制,以矢量或矩阵作为输入参数,主要通过描点法绘图。
1.1用plot函数绘图
plot函数是MATLAB中最常用的绘图函数,可以用来绘制单条或多条曲线,是MATLAB绘图的基础。
1.用plot绘制函数y=sin(x)的图形,因为MATLAB是描点法的,因此要将变量离散化。
x=-pi:
0.1:
pi;
y=sin(x);
plot(x,y)
正弦函数图形
2.用plot绘制图形可以通过交换参数位置来交换坐标轴,如绘制
的图形,
x=-3:
0.1:
1;
y=x.^2+2*x+3;
subplot(121),plot(x,y)
subplot(122),plot(y,x)
多项式函数在不同坐标系下的图形
3.绘制多条曲线
x=linspace(0,2*pi,100);
plot(x,sin(x),x,cos(x))
plot同时绘制多条曲线
4.改变颜色及图线形态
x=linspace(0,2*pi,100);
plot(x,sin(x),'cs',x,cos(x),'g*')
自定义颜色和线型的正余弦函数图形
5.用axis([xmin,xmax,ymin,ymax])函数确定坐标轴的范围
x=linspace(0,2*pi,100);
plot(x,sin(x),'cs',x,cos(x),'g*')
axis([0,6.3,-1.2,1.2])
用axis函数调整过的图形
前面主要讲的是两个函数均为向量的形式,下面介绍一下其他变量的输入形式。
6.plot(x,Y),x为向量,Y为矩阵。
如果x的元素个数与Y的列数相等,则采用矩阵Y的列向数据;如果x的元素个数与Y的行数相等,则采用矩阵Y的行向数据;若Y是方阵,则采用列向量数据。
x=1:
length(peaks);
Y=peaks;
plot(x,Y)
一个向量、一个矩阵作为plot函数的输入参数绘图
7.输入参数为矩阵时,如plot(Y),如果Y有m行n列,则绘出n个图形。
X=peaks(100);
plot(X)
输入参数为矩阵的plot绘图
如果输入参数两个都是矩阵,如plot(X,Y),则绘制X的列向量数据相对的Y的列向量的数据的图形。
8.当plot的输入参数为一个复矩阵时,则在绘图时相当于使用real和imag函数将复矩阵分离成实部和虚部两个矩阵。
plot(eig(randn(50,50)),'g*','markersize',8)
随机矩阵的特征值
1.2专业二维绘图函数
1.bar和barh函数用来绘制垂直和水平直方图。
clearall;
bar(rand(1,10))
Y是向量时的直方图
用来绘制mXn的矩阵的直方图。
x=-2:
0.1:
2;
Y=exp(-x.*x);
bar(x,Y)
钟型图
2.用area函数可以根据矢量或矩阵的各列生产一个区域图
X=magic(5);
area(X)
矩阵的区域图
3.已知资料的误差值,利用errorbar函数来表示
x=linspace(0,2*pi,30);
y=sin(x);
e=std(y)*ones(size(x))%标准差
errorbar(x,y,e)
误差的区域范围
4.对于变化剧烈的函数,可用fplot来进行较精确的绘图,该函数对剧烈变化处进行较密集的取样。
x=0.02:
0.001:
0.2;
subplot(121),plot(x,sin(1./x))
subplot(122),fplot('sin(1/x)',[0.020.2])
用fplot精确绘图与plot绘图比较
5.用polar函数产生极坐标图
theta=linspace(0,2*pi);
r=cos(4*theta);
polar(theta,r)
极坐标图
6.对于大量的资料,用hist函数来显示资料数据的分部情况
x=-3:
0.1:
3;
y=randn(1000,1);
hist(y,x)
频数累计柱状图
7.rose和hist很接近,只不过rose是将资料大小视为角度,资料个数视为距离,并用极坐标绘制表示。
x=randn(1000,1);
rose(x)
极坐标中的频数累计直方图
8.stairs函数可画出阶梯图
x=linspace(0,10,50);
y=sin(x).*exp(-x/3);
stairs(x,y)
阶梯图
9.stem可产生针状图,常用来绘制数位信号
x=linspace(0,10,50);
y=sin(x).*exp(-x/3);
stem(x,y)
针状图
10.fill函数将资料点视为多边形顶点,并将此多边形涂上颜色。
x=linspace(0,10,50);
y=sin(x).*exp(-x/3);
fill(x,y,'b')
填充图
11.feather将每一个资料点视为复数,并以箭头号画出
theta=linspace(0,2*pi,20);
z=cos(theta)+i*sin(theta);
feather(z)
羽毛图
12.compas和feather很接近,只是每个箭头号的起点都在圆内
theta=linspace(0,2*pi,20);
z=cos(theta)+i*sin(theta);
compass(z)
罗盘图
13.scatter(X,Y,S,C)在向量X、Y定义的位置绘制彩色的圆圈标志(X、Y必须大小相同),S定义了每个符号的大小,C定义了每个标记的颜色。
loadseamount
scatter(x,y,8,z)
离散点图
14.pie(X)使用X里的数据绘制一张饼图,X里的每一个元素被表示为饼图的一张切片。
pie(X,explode)分离饼图中的某一切片。
x=[4372165];
explode=[0000010];
pie(x,explode)
饼图
15.quiver用来绘制向量图
[X,Y]=meshgrid(-2:
0.2:
2);
Z=X.*exp(-X.^2-Y.^2);
[DX,DY]=gradient(Z,2,2);
quiver(X,Y,DX,DY)
函数梯度图
16.凸壳图常用命令K=conhull(x,y)
xx=-1:
0.04:
1;
yy=abs(sqrt(xx));
[x,y]=pol2cart(xx,yy);
k=convhull(x,y);
plot(x(k),y(k),'r-',x,y,'g*')
凸壳图
二、MATLAB其他基本函数与基本图形处理
2.1其他基本函数
1.loglog、semilog和semilogy三个函数的用法同plot,只是Y轴的刻度有所不同。
x=logspace(-1,1);
loglog(x,exp(x),'o');
gridon
双对数刻度曲线
x=logspace(-1,0);
y=exp(x);
subplot(121),semilogx(x,y,'b*');
subplot(122),semilogy(x,y,'g+')
半对数刻度曲线图
2.plotyy可以产生两个y轴,在同一个图中绘制两组不同的数据,或指定一种数据的两种不同显示形式。
t=0:
pi/20:
6;
y=exp(sin(t));
plotyy(t,y,t,y,'plot','stem')
同一数据的不同图形显示形式
t=0:
900;A=1000;a=0.005;b=0.005;
z1=A*exp(-a*t);
z2=sin(b*t);
plotyy(t,z1,t,z2,'semilogy','plot')
用两种不同类型的Y轴绘图比较
2.2图形标注及简单处理
1.xlabel、ylabel、title标注
fplot('sin(x)./x',[-2020-0.41.2]);
title('Fplotoff(x)=sin(x)/x');
xlabel('x'),ylabel('f(x)')
对x、y轴及全图加注说明
2.用函数text可以将文本字符串放置在图形中的任意位置,放置字符串的位置可以用图形上的点来表示。
x=0:
pi/100:
6;
plot(x,sin(x));
text(3*pi/4,sin(3*pi/4),'\leftarrowsin(x)=0.707','fontsize',14);
text(pi,sin(pi),'\leftarrowsin(x)=0','fontsize',14);
text(5*pi/4,sin(5*pi/4),'sin(x)=-0.707\rightarrow','horizontal','right','fontsize',14);
在图形中添加文本标注
\leftarrow用来显示向左的箭头,horizontal用来指定水平的对齐方式,right用于指定右对齐,默认的对齐方式为左对齐。
垂直对齐方式为居中对齐。
3.使用函数gtext可以将一个字符串放到图形中,位置由鼠标来确定。
plot(peaks(80));
gtext('多么优美的图形','fontsize',16)
使用函数gtext添加文本标注
4.使用函数legend可以在图形中添加图例,不同图例的线型及颜色自动生成,可以对不同图形在图例中加以说明。
x=magic(3);bar(x);
legend('第一列','第二列','第三列',2);
gridon
显示图例
5.创建子图的函数命令subplot
6.用axis函数对图形坐标轴进行处理
x=linspace(0,2*pi,30);
y=sin(x);
z=cos(x);
subplot(221),plot(x,y,x,z);
axisoff;
axis('square','equal');
subplot(222),plot(x,y,x,z);
axisoff;
axis('xy','normal');
subplot(223),plot(x,y,x,z);
axison;
axis('square','equal');
subplot(224),plot(x,y,x,z);
axison;
axis('xy','normal');
用axis函数对图形坐标轴进行处理
三、MATLAB三维绘图
3.1基本三维绘图
1.plot3函数用来画一个三维的曲线
t=0:
pi/50:
10*pi;
plot3(sin(t),cos(t),t);
title('Helix');
xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t');
axis('ij');%注意图的y轴及曲线方向改变了
绘制三维线图
同时画出两条三维空间中的曲线
t=linspace(0,10*pi,501);
plot3(t.*sin(t),t.*cos(t),t,t.*sin(t),t.*cos(t),-t)
同时画出两条三维空间中的曲线
形状酷似一条夺目的宝石项链
宝石项链
2.mesh也是三维空间立体绘图的基本命令。
可画出立体网状图,其产生的图形都会依高度而有不同颜色。
x=linspace(-1,1,25);%在x轴上取25点
y=linspace(-1,1,25);%在y轴上取25点
[xx,yy]=meshgrid(x,y);%xx和yy都是21X21的矩阵
zz=xx.*exp(-xx.^2-yy.^2);%计算函数值,zz也是21X21的矩阵
mesh(xx,yy,zz);%画出立体网状图
绘制立体网状图
3.MATLAB中以meshgrid配合mesh或surf指令来绘制一个三维的曲面
x=-7.5:
0.5:
7.5;
y=x;
%先产生x及y二个阵列
[X,Y]=meshgrid(x,y);
%再以meshgrid形成二维的网格数据
R=sqrt(X.^2+Y.^2)+eps;%eps浮点相对精度
%加上eps可避免当R在分母趋近零时无法定义
Z=sin(R)./R;
%产生z轴的数据
surf(X,Y,Z)
%将z轴的变化值以曲面方式画出
绘制立体曲面图
用曲面图表示函数
clf;
x=-4:
4;
y=x;
[X,Y]=meshgrid(x,y);
%生成x-y坐标格点矩阵
Z=X.^2+Y.^2;
%计算格点上的函数值
surf(X,Y,Z);
holdon;
colormap(hot);
%颜色控制
stem3(X,Y,Z,'bo');
%用来表现在格点上计算函数值
函数图
4.MATLAB用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函数
5.等值线图的相关指令为contour、coutour3。
[X,Y,Z]=peaks;
%x,y及z轴的数据由peaks函数定义
subplot(221),contour(Z,20)
%画出peaks的z轴二维等值线图,20为等值线的数目
subplot(222),contour(X,Y,Z,20);
%画出peaks的二维等值线图,20为等值线的数目,注意x,y轴与上图不同
subplot(223),contour3(Z,20);
%画出peaks的z轴三维等值线图
subplot(224),contour3(X,Y,Z,20);
%画出peaks的三维等值线图,注意x,y轴与上图不同
Contour、contour3绘图比较
6.slice函数用来绘制立体空间的正交切片图
[x,y,z]=meshgrid(-2:
.2:
2,-2:
.2:
2,-2:
.2:
2);
v=x.*exp(-x.^2-y.^2-z.^2);
slice(v,[51521],21,[110]);
axis([021021021])
colormap(jet)
切片图
7.用quiver3函数绘制三维向量场图
[X,Y]=meshgrid(-2:
0.25:
2,-1:
0.2:
1);
Z=X.*exp(-X.^2-Y.^2);
[U,V,W]=surfnorm(X,Y,Z);%空间表面的法线
quiver3(X,Y,Z,U,V,W,0.5);
holdon;
surf(X,Y,Z);
colormaphsv;
view(-35,45);
axis([-22-11-0.60.6]);
holdoff
一个函数的法向表面
8.用clinder函数绘制柱面图
t=0:
pi/10:
2*pi;
[X,Y,Z]=cylinder(2+cos(t));
surf(X,Y,Z);
axissquare
母线是曲面的柱面图
9.用bar3函数绘制三维垂直和水平直方图
Y=cool(7);
%Y是由冷色图生成的7X3矩阵
bar3(Y)
三维垂直直方图
3.2MATLAB图形处理
1.meshz可将曲面加上围裙
[x,y,z]=peaks;
meshz(x,y,z);
axis([-infinf-infinf-infinf])
给peaks图加围裙
2.waterfall可在x方向或y方向产生水流效果
[x,y,z]=peaks;
waterfall(x,y,z);
axis([-infinf-infinf-infinf])
Water函数水流效果
3.meshc同时画出网状图与等高线
[x,y,z]=peaks;
meshc(x,y,z);
axis([-infinf-infinf-infinf])
同时画出网状图与等高线
4.surf同时画出曲面图与等高线
[x,y,z]=peaks;
surfc(x,y,z);
axis([-infinf-infinf-infinf])
同时画出曲面图与等高线
5.图形的透视
[X0,Y0,Z0]=sphere(30);%产生单位球面的三维坐标
%产生半径为2的球面的三维坐标
x=2*X0;
y=2*Y0;
z=2*Z0;
clf,surf(X0,Y0,Z0);%画单位球面
shadinginterp;%采用插补明暗处理
holdon
mesh(x,y,z);
colormap(hot);
holdoff;%采用hot色彩
hiddenoff;%产生透视效果
axisequal;
axisoff;%不显示坐标轴
剔透玲珑球
6.图形的剪切。
利用“非数”NaN,对图形进行裁切处理。
clf;
t=linspace(0,2*pi,100);
r=1-exp(-t/2).*cos(4*t);
%旋转母线
[X,Y,Z]=cylinder(r,60);
%产生旋转柱面数据
ii=find(X<0&Y<0);
%确定x-y平面第四象限上的数据下标
Z(ii)=NaN;%剪切
surf(X,Y,Z);
colormap(spring);
shadinginterp;
light('position',[-3,-1,3],'style','local');
%设置光源
material([0.5,0.4,0.3,10,0.3]);
%设置表面反射
剪切四分之一后的图形
7.图形的镂空。
利用“非数”NaN,对图形进行裁切处理。
P=peaks(30);
P(18:
20,9:
15)=NaN;
%镂空
surfc(P);
colormap(summer);
light('position',[50,-10,5]),lightingflat;
material([0.9,0.9,0.6,15,0.4]);
镂方孔的曲面
8.图形的裁切
clf,x=[-8:
0.2:
8];
y=x;
[X,Y]=meshgrid(x,y);
ZZ=X.^2-Y.^2;
ii=find(abs(X)>6|abs(Y)>6);
%确定超出[-6,6]范围的格点下标
ZZ(ii)=zeros(size(ii));
%强制为0
surf(X,Y,ZZ);
shadinginterp;
colormap(copper);
light('position',[0,15,1]);
lightingphong;
material([0.80.80.5100.5])
经裁切处理后的图形
9.用色彩表现函数的特征,即图形的思维表示。
当三维网线图、曲面图的第四个输入参数取一些特殊矩阵时,色彩就能表现或加强函数的某个特征,如梯度、曲率、方向导数等。
x=3*pi*(-1:
1/15:
1);
y=x;
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
[dzdx,dzdy]=gradient(Z);
dzdr=sqrt(dzdx.^2+dzdy.^2);
%计算对r的导数
dz2=del2(Z);
%计算曲率
subplot(121),surf(X,Y,Z);
title('NO.1surf(X,Y,Z)');
shadingfaceted;
colorbar('horiz'),brighten(0.2);
subplot(122),surf(X,Y,Z,R);
title('NO.2surf(X,Y,Z,R)');
shadingfaceted;
colorbar('horiz');
figure
(2)
subplot(121),surf(X,Y,Z,dzdx);
shadingfaceted;
colorbar('horiz'),brighten(0.1);
title('NO.3surf(X,Y,Z,dzdx)');
subplot(122),surf(X,Y,Z,dzdx);
shadingfaceted;
colorbar('horiz');
title('NO.4surf(X,Y,Z,dzdy)');
figure(3)
subplot(121),surf(X,Y,Z,abs(dzdr));
shadingfaceted;
colorbar('horiz'),brighten(0.6);
title('NO.5surf(X,Y,Z,abs(dzdr))');
subplot(122),surf(X,Y,Z,abs(dz2));
shadingfaceted;
colorbar('horiz');
title('NO.6surf(X,Y,Z,abs(dz2))');
色彩分别表现函数的高度和半径特征
色彩分别表示函数的x方向和y方向导数特征
色彩分别表示函数的径向导数和曲率特征
3.3动态图形的制作
1.彗星状轨迹图
shg;n=10;
t=n*pi*(0:
0.0005:
1);
x=sin(t);y=cos(t);
plot(x,y,'g');
axissquare;holdon
comet(x,y,0.01);holdoff
彗星状轨迹图
2.卫星返回地球的运动轨迹
shg;R0=1;%地球半径为一个单位
a=12*R0;
b=9*R0;
T0=2*pi;%T0是轨道周期
T=5*T0;
dt=pi/100;
t=[0:
dt:
T]';
f=sqrt(a^2-b^2);%地球与另一焦点的距离
th=12.5*pi/180;%卫星轨道与x-y平面的倾角
E=exp(-t/20);%轨道收缩率
x=E.*(a*cos(t)-f);
y=E.*(b*cos(th)*sin(t));
z=E.*(b*sin(th)*sin(t));
plot3(x,y,z,'g');%画全程轨迹
[X,Y,Z]=sphere(30);
X=R0*X;Y=R0*Y;Z=R0*Z;%获得单位球坐标
gridon,holdon;
surf(X,Y,Z),shadinginterp;%画地球
x1=-18*R0;X2=6*R0;
y1=-12*R0;y2=12*R0;
z1=-6*R0;z2=6*R0;
%确定坐标范围
view([11737]),comet3(x,y,z,0.02),holdoff
%设视角、画运动线
卫星返回地球轨线示意图
3.图形旋转可以使用rotat