版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章MATLAB绘图数值计算第2章MATLAB绘图2.1二维图形
2.2三维图形
2.3三维图形的精细处理
2.4图像与动画
2.5低层绘图操作
MATLAB提供多种图形功能,使你的数据或函数可视化,使数据不再是枯燥乏味的。使用MATLAB的图形函数,可以绘制二维或三维的数据图形和函数图形,如数据的散点图、直方图、茎干图、饼图、阶梯图和面积图等。使数据可视化的基本步骤是:1.准备好数据;2.选择适用的绘制图形函数;3.选择窗口和位置;4.编辑图形标注和说明;5.输出或保存图形。2.1二维图形2.1.1绘制二维曲线的最基本函数1.plot函数的基本用法plot函数的基本调用格式为:plot(x,y)
其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。条件是元素个数能对应。用直线连接相邻两数据点来绘制图形可以一次绘制一条曲线,也可以一次绘制多条曲线可以设定绘图颜色、点型、线型、线宽等特性Matlab作图的基本步骤1、准备绘图数据:x=[0:pi/10:2*pi]y=sin(x)2、调用绘图函数作出图形,如:plot(x,y)
3、调用相关函数和命令调整图形特性,如:gridonaxis([-1,8,-2,2])
若x的长度与Y的行数相等,则将x与Y中的各列相对应,绘制多条平面曲线; 若x的长度与Y的列数相等,则将x与Y中的各行相对应,绘制多条平面曲线。
plot(x,Y)x
是一维数组,Y是二维数组
plot(X,y)X
是二维数组,y是一维数组
若y的长度与X的行数相等,则将X中的各列与y相对应,绘制多条平面曲线; 若y的长度与X的列数相等,则将X中的各行与y相对应,绘制多条平面曲线。plot(Y)x=1:length(Y)plot(x,Y)x=1:size(Y,1)plot(x,Y)当Y为复数数组时,等价于:当Y是实数二维数组时,等价于:当Y是实数一维数组时,等价于:plot(real(Y),imag(Y))例:利用二维数组绘制图形:x=0:0.1:2*pix=x'X=[x,x,x]Y=[cos(x),2*cos(x),3*cos(x)]plot(X,Y)plot(X’,Y’)例2.1
在0≤X≤2
区间内,绘制曲线y=2e-0.5xsin(2πx)。程序如下:>>x=0:pi/100:2*pi;y=2*exp(-0.5*x).*sin(2*pi*x);plot(x,y)
说明:(1)当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。(2)当x是向量,y是有一维与x同维的矩阵时,则绘制出多根不同色彩的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。>>x=0:pi/100:2*pi;y=[sin(2*pi*x);2*exp(-0.5*x).*sin(2*pi*x)];plot(x,y)线性代数中:列×行=矩阵n=9x=linspace(0,2*pi,50)y=cos(x)’*(1:n)plot(x,y)例:利用矩阵乘法生成绘图数据,并绘制图形:(3)plot函数最简单的调用格式是只包含一个输入参数:plot(y)即绘制以向量Y元素值为纵坐标(假如元素为实数),它的下标值为横坐标的线性图(即绘制Y的列向量对其坐标索引的图形)。
>>y=[00.580.70.950.830.25];>>plot(y);%实际上是画折线
例2.2某工厂2000年各月总产值(单位:万元)分别为22、60、88、95、56、23、9、10、14、81、56、23,试绘制折线图以显示出该厂总产值的变化情况。程序如下:>>p=[22,60,88,95,56,23,9,10,14,81,56,23];plot(p)
x=linspace(0,2*pi,30);y=sin(x);plot(y)注意为29等分,30维向量,与plot(y)的区别.>>x=linspace(0,2*pi,30);y=sin(x);
>>plot(x,y)
2.含多个输入参数的plot函数含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn)3.含选项的plot函数含选项的plot函数调用格式为:plot(x1,y1,选项1,x2,y2,选项2,…,xn,yn,选项n)选项参数option定义了图形曲线的颜色、线型及标示符号,它由一对单引号括起来。线型
线方式:-实线,:点线,-.虚点线,--波折线标记点.(圆点),+(加号),*(星号),x(叉号),o(圆点),s(方块),d(菱形),p(五角星),h(六角形)线的颜色:yyellow,rred,ggreen,bblue,wwrite,kblack,ccyan(青色)在不指定时,默认实线方式,颜色自动确定.不同种类的选项可搭配使用,如选项“ro”表示绘制红色的圆划线,“y-”表示黄色的实划线。plot(X1,Y1,LineSpec,...,Xn,Yn,LineSpec)
按照三个参数Xn,Yn,LineSpec画线,其中LineSpec指定了线型,点标记和画线的颜色,也可以混合使用三参数Xn,Yn,LineSpec和二参数Xn,Yn:
plot(X1,Y1,X2,Y2,LineSpec,X3,Y3)。线型点标记颜色-实线:点线-.点划线--虚线.点o小圆圈x叉号+加号星号s方格d菱形v下三角^
上三角<左三角>右三角p五角星h六角星b蓝色g绿色r红色c青色m棕色y黄色k黑色w白色LineSpec的三种属性可以全部指定,也可以只指定其中某一个或两个,排列顺序任意x=0:0.2:2*pi;y=sin(x);plot(x,y,'r-o')x=0:0.2:2*piy=sin(x)plot(x,y,'ro')指定不指定线型的话,plot()只绘制点标记plot(X1,Y1,LineSpec,‘PropertyName’,PropertyValue)
对plot生成的图形对象,用指定的properties进行设置。Color 非标准颜色可用[r,g,b]指定,r,g,b取0和1之间的数值LineWidth 线宽LineStyle 线型Marker 点标记MarkerEdgeColor
marker的颜色(或filledmarkers
边的颜色)MarkerFaceColor thefaceoffilledmarkers
的颜色MarkerSize
点标记的大小PropertyNamefilledmarkers
circle,square,diamond,pentagram,hexagram,andthefourtriangles)x=-pi:pi/10:pi;y=tan(sin(x))-sin(tan(x));plot(x,y,'--rs','LineWidth',2,...'MarkerEdgeColor','k',...'MarkerFaceColor','g',...'MarkerSize',10)h=plot(...)
返回图形对象的句柄。图形中的每条曲线都返回自己的句柄(是一个双精度数)。如有多条曲线,则有多个句柄,以列向量的形式返回至h。
句柄是图形对象的标识代码,标识代码含有图形对象的各种必要的属性信息,可用get()
函数获取这些属性,用set()函数设置(修改)属性。x=0:0.2:2*piY=[sin(x);2*sin(2*x)]h=plot(x,Y)get(h(1))set(h(1),'Color','r','LineWidth',1,'Marker','+')set(h(2),'Color','g','LineWidth',2,'Marker','s')例用不同线型和颜色在同一坐标内绘制曲线y=sinx,y=cosx的图像。程序如下:x=linspace(0,2*pi,100);plot(x,sin(x),‘kh’,x,cos(x),‘gp’)
%正、余弦曲线分别用黑色六角形、绿色五角星表示
例2.3
用不同线型和颜色在同一坐标内绘制曲线y=2e-0.5xsin(2πx)及其包络线。程序如下:
x=(0:pi/100:2*pi)';y1=2*exp(-0.5*x)*[1,-1];y2=2*exp(-0.5*x).*sin(2*pi*x);x1=(0:12)/2;y3=2*exp(-0.5*x1).*sin(2*pi*x1);plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp');
4.双纵坐标函数plotyyplotyy函数是MATLAB5.X新增的函数。它能把函数值具有不同量纲、不同数量级的两个函数绘制在同一坐标中。调用格式为:
plotyy(x1,y1,x2,y2)
其中x1—y1对应一条曲线,x2—y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1—y1数据对,右纵坐标用于x2—y2数据对。4、双y轴绘图:plotyy()plotyy(X1,Y1,X2,Y2):
其中X1,Y1对应一条曲线,X2,Y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。plotyy(X1,Y1,X2,Y2,'function')
使用由function指定的函数绘图,function可以是:plot,semilogx,semilogy,loglog,stem……plotyy(X1,Y1,X2,Y2,'function1','function2')
使用由function1指定的函数作X1,Y1的图 使用有function2指定的函数作X2,Y2的图[AX,H1,H2]=plotyy(...) AX:存储两个Y轴的句柄,AX(1)为左Y轴的句柄,AX(2)为右Y轴的句柄。H1和H2分别为两个图形对象的句柄。
如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy()绘图函数。plotyy()和plot()作图比较plotyy举例x=0:0.01:20;y1=200*exp(-0.05*x).*sin(x);y2=0.8*exp(-0.5*x).*sin(10*x);[AX,H1,H2]=plotyy(x,y1,x,y2,'plot');title('MultipleDecayRates')xlabel('Time(\musec)')set(get(AX(1),'Ylabel'),'String','SlowDecay')set(get(AX(2),'Ylabel'),'String','FastDecay')set(H1,'LineStyle','--')set(H2,'LineStyle',':')
例2.4
用不同标度在同一坐标内绘制曲线y1=e-0.5xsin(2πx)
及曲线y2=1.5e-0.1xsin(x)。程序如下:
x1=0:pi/100:2*pi;x2=0:pi/100:3*pi;y1=exp(-0.5*x1).*sin(2*pi*x1);y2=1.5*exp(-0.1*x2).*sin(x2);plotyy(x1,y1,x2,y2);
有关图形标注函数的调用格式为:title(‘字符串’):在所画图形的最上端显示说明该图形标题的字符串。
xlabel(‘字符串’),ylabel(‘字符串’):分别为x,y坐标轴加上注解和说明,其中ylabel会自动旋转90º显示。text(x,y,’字符串’,‘属性名’,值)在图形的指定坐标位置(x,y)处,标示单引号括起来的字符串是要说明的内容,属性名及其定义字符串的显示格式。字符对象的常用属性如下:
Color属性:1*3的颜色向量
FontAngle属性:字体倾斜形式
FontName属性:字体名称
…….text(2.5,0.7,'sinx')在图中(2.5,0.7)处加字符串'sinx',或gtext('sinx'),用鼠标光标定位置x=linspace(0,2*pi,100);plot(x,sin(x),'kh',x,cos(x),'gp')text(pi,0,'\leftarrowsin(\pi)','fontSize',18)legend(‘字符串1’,‘字符串2’,…,‘字符串n’)在屏幕上开启一个小视窗,然后依据绘图命令的先后次序,用对应的字符串区分图形上的线。
legend('y=sin(x)','y=cos(x)');x=linspace(0,2*pi,100);plot(x,sin(x),'kh',x,cos(x),'gp')text(pi,0,'\leftarrowsin(\pi)','fontSize',18)
例2.5
给图形添加图形标注。程序如下:
x=(0:pi/100:2*pi)';y1=2*exp(-0.5*x)*[1,-1];y2=2*exp(-0.5*x).*sin(2*pi*x);x1=(0:12)/2;y3=2*exp(-0.5*x1).*sin(2*pi*x1);plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp');title('曲线及其包络线');%加图形标题
xlabel('independentvariableX');%加X轴说明
ylabel('independentvariableY');%加Y轴说明
gtext(‘包络线’);%在鼠标光标定位置添加图形说明
gtext('包络线');gtext('曲线y');gtext('离散数据点');legend('包络线','包络线','曲线y','离散数据点')%加图例3、选择图像
figure(1);figure(2);…;figure(n)
打开不同的图形窗口,以便绘制不同的图形。4、gridon:在所画出的图形坐标中加入栅格
gridoff:除去图形坐标中的栅格不带参数的grid命令在两种状态之间进行切换。5、holdon:把当前图形保持在屏幕上不变,同时允许在这个坐标内绘制另外一个图形。
holdoff:使新图覆盖旧的图形6、boxon/off命令控制是加还是不加边框线,不带参数的box命令在两种状态之间进行切换。>>x=0:pi/15:2*pi;y=sin(x);plot(x,y),>>holdon,z=cos(x);plot(x,z),holdoff
例2.6
用图形保持功能在同一坐标内绘制曲线y=2e-0.5xsin(2πx)及其包络线,并加网格线。程序如下:
x=(0:pi/100:2*pi)';y1=2*exp(-0.5*x)*[1,-1];y2=2*exp(-0.5*x).*sin(2*pi*x);plot(x,y1,'b:');axis([0,2*pi,-2,2]);%设置坐标
holdon;%设置图形保持状态
plot(x,y2,'k');gridon;%加网格线
boxoff;%不加坐标边框
holdoff;%关闭图形保持3、图形窗口(Figure) Figure对象是Matlab系统中显示的图形窗口。用户可建立任意多个Figure窗。所有Figure对象的父对象都是Root对象,而其他所有Matlab图形对象都是Figure的子对象。
figure():创建图形窗口close():删除图形窗口clf():图形图形窗口中的子对象gcf :返回当前窗口对象的句柄创建图形窗口:figurefigure
利用缺省属性值来创建新的图形窗口对象。
figure(‘PropertyName’,propertyvalue,...)
利用指定的属性值来创建图形窗口对象。对于用户没有显式地定义的属性值,将其设置为默认的属性值。
figure(h)
如果句柄h所指示的图形窗口对象存在,则将其设置为当前窗口,并将其移动到屏幕的最前方。如果h所指示的图形窗口不存在且h是个整数(h>=1),则创建一个图形窗口,并将窗口的句柄设置为h;如果h不是整数,则返回错误信息。
h
=
figure(...)
返回图形窗口对象的句柄。为了在一个已有的图形窗口中绘制图形,这个窗口必须是激活的,或者是当前的图形窗口。1、close
删除当前figure,相当于close(gcf)2、close(h)
删除由h确定的figure。如果h是一个向量或矩阵,就删除由h指定的所有图像3、closename
删除指定名称的figure4、closeall
删除所有句柄没有隐藏的figure5、closeallhidden
删除所有figure,包括句柄隐藏的。6、status=close(...)
如果指定的figure已经被删除则返回1,否则为0。删除图形窗口:close清除图形窗口中的子对象:clf1、clf 删除当前图形窗口中、句柄未被隐藏(即它们的HandleVisibility属性为on)的图形对象。
2.clf(‘reset’)
或clfreset删除当前图形窗口中的所有图形对象,无论其句柄是否被隐藏,同时将图形窗口的属性(除Position,Units,PaperPosition,PaperUnits外)恢复为默认值。
3、clf(fig)
或clf(fig,‘reset’)
清除由句柄为fig的图形窗口中的内容。
4、figure_handle=clf(...)
返回图形窗口的句柄,
3.图形窗口的分割subplot()subplot函数的调用格式为:
subplot(m,n,p)---把一个画面分割成m*n个矩阵块区域,p代表当前的区域号,在每个区域中分别画一个图6、subplot()subplot(m,n,p)
将一个绘图窗口分割成m行n列共m×n个矩形绘图区域(每个区域有自己的坐标轴)并将第p个绘图区域选定为当前的绘图区域。编号从最上边一行开始,从左至右、从上至下依次编号。subplot(1,1,1) 回到默认的模式(整个图形窗口中只用一套坐标轴)当一个新的subplot命令改变了图形窗口中绘图区域的数目的时候,原先的子图就被擦除掉。subplot(m,n,p,‘replace’)
如果指定的axes已存在,则删除它,创建一个新的axes。subplot(‘Position’,[leftbottomwidthheight])在当前图形窗口指定的Position上画图(创建坐标轴)
subplot(...,prop1,value1,prop2,value2,...)
创立坐标系时,同时设置坐标系的相关属性。
h=subplot(...)
返回坐标系的句柄。h=subplot(m,n,p)
返回第p个坐标轴的句柄subplot(h)
设置句柄h对应的坐标轴为当前坐标轴。
subplot(m,n,P) P是一个向量,表示向量P中指定的若干画图区域连成一个整体,包括那些被P跨越的画图区域。subplot(2,3,1)subplot(2,3,2)subplot(2,3,3)subplot(2,3,4)subplot(2,3,5:6)subplot(2,3,1)subplot(2,3,3)subplot(2,3,4)subplot(2,3,6)subplot(2,3,[2,5])subplot(2,3,1)subplot(2,3,4)subplot(2,3,[3,5,6])例:使用subplot()x=-pi:pi/10:pi;x=x';Y=[sin(x),cos(x),x.^2,exp(x)];fork=1:4subplot(2,2,k);plot(x,Y(:,k));end
先用subplot()确定在哪一个区域中绘图,然后再使用其它的绘图函数。被激活的绘图区域在用户输入另一个subplot或者figure命令之前会一直保持被激活状态。上机练习m223-3n3-355要求:1、m、n分别取上表中的四个数值2、绘制1秒内的运动轨迹,每隔0.001秒取一个点;3、四种情况的运动轨迹绘制在一个图形窗口的四个坐标轴中,排成2行2列。某质点的位移由x(t)和y(t)确定,试绘制其运动轨迹m=[2,2,3,-3];n=[3,-3,5,5];t=0:0.001:1;fork=1:4x=2*cos(20*m(k)*pi.*t)+cos(20*n(k)*pi.*t);y=2*sin(20*m(k)*pi.*t)+sin(20*n(k)*pi.*t);subplot(2,2,k)plot(x,y)end上机练习v=0:0.1:2000;m1=20.18*1.66e-27;m2=39.94*1.66e-27;T1=273T2=500k=1.381e-23a=4*pi*(m1/2*pi*k*T1)^(3/2)*(exp(-m1*v.^2/(2*k*T1))).*v.^2;b=4*pi*(m2/2*pi*k*T1)^(3/2)*(exp(-m2*v.^2/(2*k*T1))).*v.^2;c=4*pi*(m1/2*pi*k*T2)^(3/2)*(exp(-m1*v.^2/(2*k*T2))).*v.^2;d=4*pi*(m2/2*pi*k*T2)^(3/2)*(exp(-m2*v.^2/(2*k*T2))).*v.^2;subplot(2,2,1)axis([0.0,10,-0.01,0.03])plot(v,a,'r',v,c,'b');subplot(2,2,2)plot(v,b,'r',v,d,'b');例2.7在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。程序如下:
x=linspace(0,2*pi,60);y=sin(x);z=cos(x);t=sin(x)./(cos(x)+eps);ct=cos(x)./(sin(x)+eps);subplot(2,2,1);plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);subplot(2,2,2);plot(x,z);title('cos(x)');axis([0,2*pi,-1,1]);subplot(2,2,3);plot(x,t);title('tangent(x)');axis([0,2*pi,-40,40]);subplot(2,2,4);plot(x,ct);title('cotangent(x)');axis([0,2*pi,-40,40]);
对图形窗口灵活分割。请看下面的程序。
x=linspace(0,2*pi,60);y=sin(x);z=cos(x);t=sin(x)./(cos(x)+eps);ct=cos(x)./(sin(x)+eps);subplot(2,2,1);%选择2×2个区中的1号区
stairs(x,y);title('sin(x)-1');axis([0,2*pi,-1,1]);subplot(2,1,2);%选择2×1个区中的2号区
stem(x,y);title('sin(x)-2');axis([0,2*pi,-1,1]);subplot(4,4,3);%选择4×4个区中的3号区
plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);subplot(4,4,4);%选择4×4个区中的4号区
plot(x,z);title('cos(x)');axis([0,2*pi,-1,1]);subplot(4,4,7);%选择4×4个区中的7号区
plot(x,t);title('tangent(x)');axis([0,2*pi,-40,40]);subplot(4,4,8);%选择4×4个区中的8号区
plot(x,ct);title('cotangent(x)');axis([0,2*pi,-40,40]);2.1.3绘制二维图形的其他函数函数名功能函数名功能area填充面积图pie圆饼图bar条形图plotmatrix绘矩阵点图barh水平柱图ribbon以三维带形式画二维线comet慧星形轨线stem火柴杆图errorbar误差条形图stairs台阶图gplot以图论方式绘图contour等高线图feather箭头图contourf填充等高线图fill填充二维多边形clabel等高线图仰角标签pcolor伪色图rose扇形统计图quiver场图hist直方统计图voronoiVoronoi图paretoPareto图表polar极坐标图例:在平面上绘制peaks矩阵的等值线。z=peaks;contour(z,6);%Z=PEAKS;%Z=PEAKS(N);%Z=PEAKS(V);%Z=PEAKS(X,Y);%%PEAKS;%PEAKS(N);%PEAKS(V);%PEAKS(X,Y);%%[X,Y,Z]=PEAKS;%[X,Y,Z]=PEAKS(N);%[X,Y,Z]=PEAKS(V);MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点
1.其他形式的线性直角坐标图在线性直角坐标系中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:bar(x,y,选项)--条形图stairs(x,y,选项)--阶梯图stem(x,y,选项)fill(x1,y1,选项1,x2,y2,选项2,…)例:画一个钟形曲线bar(randn(1,1000))x=-2:0.1:2;y=exp(-x.*x);bar(x,y)
例2.8
分别以条形图、填充图、阶梯图和杆图形式绘制曲线y=2e-0.5x。程序如下:
x=0:0.35:7;y=2*exp(-0.5*x);subplot(2,2,1);bar(x,y,'g');title('bar(x,y,''g'')');axis([0,7,0,2]);subplot(2,2,2);fill(x,y,'r');title('fill(x,y,''r'')');axis([0,7,0,2]);subplot(2,2,3);stairs(x,y,'b');title('stairs(x,y,''b'')');axis([0,7,0,2]);subplot(2,2,4);stem(x,y,'k');title('stem(x,y,''k'')');axis([0,7,0,2]);例2.9bar()的用法举例Y=round(rand(5,3)*10);subplot(2,2,1)bar(Y,'group')title'Group'subplot(2,2,2)bar(Y,'stack')title'Stack'subplot(2,2,3)barh(Y,'stack')title'Stack'subplot(2,2,4)bar(Y,1.5)title'Width=1.5'
2.极坐标图polar函数用来绘制极坐标图,其调用格式为:polar(theta,rho,选项)其中theta为极坐标极角,rho为极坐标矢径,选项的内容与plot函数相似。例4.9
绘制ρ=sin(2θ)cos(2θ)的极坐标图。程序如下:
theta=0:0.01:2*pi;rho=sin(2*theta).*cos(2*theta);polar(theta,rho,'k');
3.对数坐标图形
MATLAB提供了绘制对数和半对数坐标曲线的函数,调用格式为:半对数坐标
semilogx(x1,y1,选项1,x2,y2,选项2,…)semilogy(x1,y1,选项1,x2,y2,选项2,…)对数坐标
loglog(x1,y1,选项1,x2,y2,选项2,…)--用常用对数刻度,即本来刻度为0,1,2,…处现为1,10,100,…
例2.10
绘制y=10x2的对数坐标图并与直角线性坐标图进行比较。程序如下:
x=0:0.1:10;y=10*x.*x;subplot(2,2,1);plot(x,y);title('plot(x,y)');gridon;subplot(2,2,2);semilogx(x,y);title('semilogx(x,y)');gridon;subplot(2,2,3);semilogy(x,y);title('semilogy(x,y)');gridon;subplot(2,2,4);loglog(x,y);title('loglog(x,y)');gridon;
4.精确绘图函数对于那些变化剧烈的函数,可用fplot函数来进行较精确的绘图,该函数会对剧烈变化处进行较密集的取样调用格式为:fplot(‘fname’,lims,tol,选项)(m文件函数名须加引号‘’,绘制由字符串fname指定函数名的函数在x轴区间为lims=[xmin,xmax]的函数图,若lims=[xmin,xmax,ymin,ymax]则y轴也被输入限制,其中tol<1用来指定相对误差精度,默认值为0.001。)例如:绘制函数sin(1/x)在x=0附近的变化情况。fplot(‘sin(1/x)’,[0.020.2],1e-3);
%[0.020.2]是绘图范围
5.其他形式的图形MATLAB提供的绘图函数还有很多,例如,用来表示各元素占总和的百分比的饼图(用pie函数)、复数的相量图(用compass函数绘制从原点向外发射的向量图)等等。例2.12绘制图形:(1)某次考试优秀、良好、中等、及格、不及格的人数分别为:7,17,23,19,5,试用饼图作成绩统计分析。(2)绘制复数的相量图:3+2i、4.5-i和-1.5+5i。程序如下:subplot(1,2,1);pie([7,17,23,19,5]);legend('优秀','良好','中等','及格','不及格');title('饼图');subplot(1,2,2);compass([3+2i,4.5-i,-1.5+5i]);title('相量图');三、(3D)三维图形1、三维曲线:plot3()2、二维数据网格:meshgrid()3、三维网格图:mesh()/meshc()/meshz()4、三维表面图:surf()/surfc()/5、利用surf()绘制一些常见的三维表面图6、三维绘图函数汇总1、三维曲线:plot3()2.2.1绘制三维曲线的最基本函数
plot3函数与plot函数用法十分相似,其调用格式为:
plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n)
其中xi,yi,zi为3个相同长度的向量。
例:作螺旋线x=sint,y=cost,z=tplot3(X1,Y1,Z1,...)plot3(X1,Y1,Z1,LineSpec,...)plot3(...,'PropertyName',PropertyValue,...)h=plot3(...)plot3()的用法与plot()类似,只是多了一个Z数组。t=[0:0.2:10*pi];x=2*t;y=sin(t);z=cos(t);plot3(x,y,z,'bo');holdonplot3(x,y,z,'r-','LineWidth',2)用plot3()同时绘制多条3d曲线
当X,Y,Z为同维的二维数组,plot3()将X、Y、Z相应的列相组合,绘制多条3d曲线。绘制第1条曲线例:使用plot3()绘制长方体的线框图L=100*randn(1);W=L*randn(1);H=W*randn(1);A=randn(1,3);B=A+[L,0,0];C=B+[0,W,0];D=A+[0,W,0];A_A=[A;B;C;D;A];a_a=A_A+repmat([0,0,H],5,1);X=[A_A(:,1),a_a(:,1)];Y=[A_A(:,2),a_a(:,2)];Z=[A_A(:,3),a_a(:,3)];plot3(X,Y,Z,'b')holdonplot3(X',Y',Z','b')长度平行于X轴,宽度平行于Y轴,高度平行于Z轴,A为3d空间任意点均随机生成。绘图思路(供参考):绘制空间曲线
A-B-C-D-Aa-b-c-d-aA-aB-bC-cD-d
x=(-4:0.5:4)'y=(-4:0.5:4)'z=sin(sqrt(x.^2+y.^2))h=plot3(x,y,z,'-bo')set(h,'MarkerEdgeColor','r')
x
y
z-4.0000-4.0000-0.5862-3.5000-3.5000-0.9720-3.0000-3.0000-0.8917-2.5000-2.5000-0.3838
………………3.00003.0000-0.89173.50003.5000-0.9720x=-4:0.5:4y=(4:-0.5:-4)'X=repmat(x,length(y),1)Y=repmat(y,1,length(x))Y=4.00004.0000…4.00004.00003.50003.5000…3.50003.5000……………-3.5000-3.5000…-3.5000-3.5000-4.0000-4.0000…-4.0000-4.0000X=-4.0000-3.5000…3.50004.0000-4.0000-3.5000…3.50004.0000……………-4.0000-3.5000…3.50004.0000-4.0000-3.5000…3.50004.0000[X,Y]=meshgrid(x,y)例4.13绘制空间曲线。X=8cost,y=4sint,z=-4sint程序如下:
t=0:pi/50:2*pi;x=8*cos(t);y=4*sqrt(2)*sin(t);z=-4*sqrt(2)*sin(t);plot3(x,y,z,'p');title('Linein3-DSpace');text(0,0,0,'origin');xlabel('X'),ylabel('Y'),zlabel('Z');grid;2、二维数据网格(三维曲面):meshgrid()
[X,Y]=meshgrid(x,y)
由向量x和y生成二维数组X和Y,用来计算二元函数
f(x,y)的值Z=f(X,Y)。二维数组X,Y,Z可用来绘制三维曲线、三维网格图、三维曲面图等。
输出数组X中的行向量相当于向量x,输出数组Y中的列向量相当于向量y。
[X,Y]=meshgrid(x)
等价于[X,Y]=meshgrid(x,x)。
1.平面网格坐标矩阵的生成(1)利用矩阵运算生成。x=a:dx:b;y=(c:dy:d)';X=ones(size(y))*x;Y=y*ones(size(x));(2)利用meshgrid函数生成。x=a:dx:b;y=c:dy:d;[X,Y]=meshgrid(x,y);%表示生成一个横坐标起始于a,步长为dx,终止于b;纵坐标起始于c,步长为dy,终止于d的网格分割。(Xi,Yj)代表网格的坐标。产生一个小网格:[X,Y]=meshgrid(0:3,0:3)X=0123012301230123Y=0000111122223333x=-4:0.5:4y=-4:0.5:4[X,Y]=meshgrid(x,y)Z=sin(sqrt(X.^2+Y.^2))
subplot(2,2,1)plot3(X,Y,Z,'bo')subplot(2,2,2)plot3(X,Y,Z,'b')subplot(2,2,3)plot3(X',Y',Z','b')subplot(2,2,4)plot3(X,Y,Z,'b',X',Y',Z','b')X=-4.0000-3.5000…3.50004.0000-4.0000-3.5000…3.50004.0000……………-4.0000-3.5000…3.50004.0000-4.0000-3.5000…3.50004.0000Y=-4.0000-4.0000…-4.0000-4.0000-3.5000-3.5000…-3.5000-3.5000……………3.50003.5000…3.50003.50004.00004.0000…4.00004.0000Z=-0.5862-0.8238…-0.8238-0.5862-0.8238-0.9720…-0.9720-0.8238……………-0.8238-0.9720…-0.9720-0.8238-0.5862-0.8238…-0.8238-0.5862绘制第1条
3d曲线绘制第2条
3d曲线mesh(X,Y,Z):绘制由数组X,Y,Z所确定的曲面的网格图
X,Y,Z都为二维数组时,要求它们的维数相同。X,Y也可以是向量,但Z必须为二维数组,[m,n]=size(Z),此时必须满足:length(X)=n且length(Y)=m。mesh(Z):相当于X=1:n,Y=1:m,其中[m,n]=size(Z)mesh(...,C):二维数组C确定网格颜色,省略C时相当于C=Zmesh(...,‘PropertyName’,PropertyValue,...):设置属性值mesh(axes_handles,...)
:在指定的坐标轴绘图h=mesh(...):返回句柄3、三维网格图:
mesh()/meshc()/meshz()x=-4:0.2:4[X,Y]=meshgrid(x)Z=sin(sqrt(X.^2+Y.^2))h=mesh(X,Y,Z)c1=get(h,'FaceColor')hiddenoffc2=get(h,'FaceColor')默认情况下每个四边形区域填充的是白色,因此c1的值[1,1,1]hiddenoff命令是使每个四边形区域不填充任何颜色,是空的,可以看到后面的图线。因此c2的值为nonemeshc(X,Y,Z)
调用方式与mesh相同,在mesh基础上增加等高线meshz(X,Y,Z)
调用方式与mesh相同,在mesh基础上屏蔽边界面等高线屏蔽边界面x=-10:0.5:10;[X,Y]=meshgrid(x);r=sqrt(X.^2+Y.^2)+epsZ=sin(r)./rmeshc(X,Y,Z)墨西哥帽子surf(Z):相当于X=1:n,Y=1:m,其中[m,n]=size(Z)surf(Z,C):二维数组C确定网格颜色,省略C时相当于C=Zsurf(X,Y,Z):绘制由数组X,Y,Z所确定的曲面图surf(X,Y,Z,C):surf(...,‘PropertyName’,PropertyValue):设置属性值surf(axes_handles,...):在指定的坐标轴绘图h=surf(...):返回句柄4、三维表面图:
surf()/surfc()绘制由矩阵X,Y,Z所确定的表面图,参数含义同meshsurfc(X,Y,Z)调用方式与surf相同,在surf基础上增加等高线x=-10:0.5:10;[X,Y]=meshgrid(x);r=sqrt(X.^2+Y.^2)+epsZ=sin(r)./rsurf(X,Y,Z)等高线mesh()/surf()的一些常用属性属性名称意义取值EdgeColor网格线颜色{ColorSpec}|none|flat|interpFaceColor四边形网格的填充颜色ColorSpec|none|{flat}|interp|texturemapLineStyle网格线线型{-}|--|:|-.|noneLineWidth网格线线宽Marker标记点形状none|+|o|*|.|x|s|d|p|h…..MarkerEdgeColor标记点边界颜色none|{auto}|flat|ColorSpecMarkerFaceColor闭合的标记点填充颜色{none}|auto|flat|ColorSpecMarkerSize标记点大小sizeinpointsMeshStyle网格类型{both}|row|column例:mesh()/surf()属性设置x=-10:0.5:10;[X,Y]=meshgrid(x);r=sqrt(X.^2+Y.^2)+epsZ=sin(r)./rh=mesh(X,Y,Z,'EdgeColor','black')set(h,'FaceColor','r')set(h,'LineWidth',2)x=-10:0.5:10;[X,Y]=meshgrid(x);r=sqrt(X.^2+Y.^2)+epsZ=sin(r)./rsurf(X,Y,Z,'EdgeColor','none')5、利用surf()绘制一些常见的三维表面图mesh()/surf()绘制三维曲面的方法:(1)先根据X,Y,Z数组确定网格点(2)用网格线连接在同一行中的网格点(3)用网格线连接在同一列中的网格点(4)用颜色数组C确定网格线(面)的颜色(1)用surf()绘制四边形平面绘图思路: 把四个顶点分成“2行2列”,将相应的坐标放进X,Y,Z数组即可绘图。 同理,对2n
边形,可将2n个顶点分成“2行n列”或“n行2列”进行处理。 对凹多边形,这样处理可能会出错。如上图,按这样的方式创建出X,Y,Z数组,即可绘制出四边形平面clcclearallcloseallA=[1;0;2]B=[3;0;3]C=[1;0;0]D=[3;0;0]P=[A,B;C,D]
X=P([1,4],:)Y=P([2,5],:)Z=P([3,6],:)h=surf(X,Y,Z)set(h,'FaceColor','b')axis([0,4,-1,1,0,4])(2)用surf()绘制三角形平面绘图思路: 想象一下,有两个A点,只不过它们完全重合,这样就有四个顶点了,可以分成“2行2列”,将相应的坐标放进X,Y,Z数组即可绘图。 选取合适的顶点,这个想法对任意多边形都可以。按这样的方式创建出X,Y,Z数组,即可绘制出三角形平面这样更简单。第一行中的A点也可以是B点、C点或多边形内部的任意一个点。例:绘制一个长方体表面图(共六个面)L=rand(1);W=rand(1);H=rand(1);
A=rand(3,1);B=A+[L;0;0];C=B+[0;W;0];D=A+[0;W;0];
r1=repmat(A,1,5);r2=[A,B,C,D,A];r3=r2+repmat([0;0;H],1,5);r4=repmat(r3(:,1),1,5);P=[r1;r2;r3;r4];X=P(1:3:end,:);Y=P(2:3:end,:);Z=P(3:3:end,:);surf(X,Y,Z,'FaceColor','b','EdgeColor','none')axisvis3dholdonx=X(2:3,:);%x,y,z用来绘制线框y=Y(2:3,:);z=Z(2:3,:);plot3(x,y,z,'r','LineWidth',3)plot3(x',y',z','r','LineWidth',3)abdcABC按这样的方式创建X,Y,Z数组,可以同时绘制出六个面。当然也可以用其它的方式进行。(3)用surf()绘制平行于XOY平面的正多边形平面CBEADN=5%绘制正N边形R=2%外接圆半径z=0t=0:2*pi/N:2*pi%绘图数组X=[R*cos(t);zeros(size(t))]Y=[R*sin(t);zeros(size(t))]Z=z*ones(size(X))…….FGO按这样的方式创建出X,Y,Z数组,即可绘制出正多边形平面N=5%绘制正N边形R=2%外接圆半径z=0t=0:2*pi/N:2*pi%侧面X=[R*cos(t);r*cos(t)]Y=[R*sin(t);r*sin(t)]Z=[z1*ones(size(t));z2*ones(size(t))]X=[R*cos(t);zeros(size(t))]Y=[R*sin(t);zeros(size(t))]Z=z*ones(size(X))%绘图数组(4)用surf()绘制正棱柱(台、锥)面ABCDabcdz1=0%底面所在的平面(平行于xoy)z2=5%顶面面所在的平面(平行于xoy)t=0:2*pi/N:2*pi%侧面X=[R*cos(t);r*cos(t)]Y=[R*sin(t);r*sin(t)]Z=[z1*ones(size(t));z2*ones(size(t))]按这样的方式创建出X,Y,Z数组,即可绘制出正棱柱的侧面t=linspace(0,2*pi,N)s=linspace(0,2*pi,M)'r=(2+sin(s))h=linspace(z1,z2,M)'X=r*cos(t);Y=r*sin(t);Z=h*ones(size(t))surf(X,Y,Z)设底面中心在(0,0,0)z1=0%底面所在的平面z2=2%顶面面所在的平面M=20%纬线数目N=20%经线数目横截面半径变化规律:列×行与meshgrid()的联系t=linspace(0,2*pi,N)s=linspace(0,2*pi,M)'r=(2+sin(s))h=linspace(z1,z2,M)'X=r*cos(t);Y=r*sin(t);Z=h*ones(size(t))surf(X,Y,Z)t=linspace(0,2*pi,N)
s=linspace(0,2*pi,M)'r=(2+sin(s))h=linspace(z1,z2,M)'[T,R]=meshgrid(t,r)[T,H]=meshgrid(t,h)X=R.*cos(T);Y=R.*sin(T);Z=Hsurf(X,Y,Z)横截面半径变化规律:横截面半径变化规律:(5)用surf()绘制球面r=2%球半径M=30%经线数N=30%纬线数phi=0:2*pi/M:2*pitheta=linspace(0,pi,N)'X=r*sin(theta)*cos(phi);Y=r*sin(theta)*sin(phi);Z=r*cos(theta)*ones(size(phi))surf(X,Y,Z)axissquare方法1:用矩阵乘法生成二维数组方法2:用meshgrid生成二维数组r=2;theta=linspace(0,pi,20);phi=linspace(0,2*pi,21);[T,P]=meshgrid(theta,phi);X=r.*sin(T).*cos(P);Y=r.*sin(T).*sin(P);Z=r.*cos(T);surf(X,Y,Z)axissquare练习:用surf()绘制椭球面练习:用surf()绘制圆环面三维曲面表面图可以用surf函数生成,其调用格式为surf(x,y,z,c)
各变量的含义与mesh函数类似。
例2.15用三维曲面图表现函数z=sin(y)cos(x)。程序1:
x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);mesh(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('mesh');
程序2:
x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);surf(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('surf');
程序3:x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);plot3(x,y,z);xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('plot3-1');grid;
例2.16绘制两个直径相等的圆管的相交图形。程序如下:%两个等直径圆管的交线m=30;z=1.2*(0:m)/m;r=ones(size(z));theta=(0:m)/m*2*pi;x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的坐标矩阵z1=z'*ones(1,m+1);x=(-m:2:m)/m;x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第二个圆管的坐标矩阵z2=r'*sin(theta);surf(x1,y1,z1);%绘制竖立的圆管axisequal,axisoffholdonsurf(x2,y2,z2);%绘制平放的圆管axisequal,axisofftitle('两个等直径圆管的交线');holdoff例2.18用曲面图表现函数Z=X.^2+Y.^2
。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') %用来表现在格点上计算函数值
例2.19
分析由函数z=x2-2y2构成的曲面形状及与平面z=a的交线。程序如下:
[x,y]=meshgrid(-10:0.2:10);z1=(x.^2-2*y.^2)+eps;%第1个曲面
a=input('a=?');z2=a*ones(size(x));%第2个曲面
subplot(1,2,1);mesh(x,y,z1);holdon;mesh(x,y,z2);%分别画出两个曲面
v=[-10,10,-10,10,-100,100];axis(v);grid;%第1子图的坐标设置
holdoff;r0=abs(z1-z2)<=1;%求两曲面z坐标差小于1的点
xx=r0.*x;yy=r0.*y;zz=r0.*z2;%求这些点上的x,y,z坐标,即交线坐标
subplot(1,2,2);plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'*');%在第2子图画出交线
axis(v);grid;%第2子图的坐标设置
例2.20在xy平面内选择区域[-8,8]×[-8,8],绘制函数的4种三维曲面图。程序如下:[x,y]=meshgrid(-8:0.5:8);z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);subplot(2,2,1);meshc(x,y,z);title('meshc(x,y,z)')subplot(2,2,2);meshz(x,y,z);title('meshz(x,y,z)')subplot(2,2,3);surfc(x,y,z)title('surfc(x,y,z)')subplot(2,2,4);surfl(x,y,z)title('surfl(x,y,z)')
5、三维旋转体的绘制/标准三维曲面球面图:sphere函数的调用格式为:
[x,y,z]=sphere(n)生成由n*n个面组成的一个球面;n省略时,生成由20*20个面组成的一个球面。柱面图:cylinder函数的调用格式为:
[x,y,z]=cylinder(R,n)MATLAB还有一个peaks函数,称为多峰函数,常用于三维曲面的演示。Matlab提供的绘制柱面的函数cylinder[X,Y,Z]=cylind
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度电商合伙合同协议书模板3篇
- 2024年度知识产权侵权责任担保合同
- 《系统详细设计》课件
- 2024年度商用电梯金融服务与租赁合同
- 《电梯维保合同模板》
- 2024中国电信集团财务限公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国电信山东济宁分公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024中国核工业二三建设限公司社会招聘100人易考易错模拟试题(共500题)试卷后附参考答案
- 《铁路伤亡事故案例》课件
- 2024中国信科集团·武汉光迅科技股份限公司春招易考易错模拟试题(共500题)试卷后附参考答案
- DB31∕T 875-2015 人身损害受伤人员休息期、营养期、护理期评定准则
- 07版监理收费标准插入法计算器
- 重庆市七年级数学上学期期中试题新人教版
- 四年级下语文课本剧16猎人海力布_
- 国际象棋战术组合技巧新版马头
- 吉林省长春市东北师大附中2019-2020上学期——九年级数学大练习题试卷
- 废旧物的“新生命” 课件
- 第三节食用菌保鲜与加工技术PPT课件
- 李宁创业案例分析PPT课件
- MSA-测量系统分析-GRR
- 介入术后出血风险预后及处理课件
评论
0/150
提交评论