MATLAB程序设计基础 MATLAB的图形处理
二维图形 基本绘图命令 plot(Y) Y为实向量,则以Y的索引坐标作为横坐标,Y作为纵坐标来绘制图形。 ?y=rand(100,1); 例: ?y=rand(100,1); ?plot(y)
?x=rand(100,1); ?z=x+y.*i; ?plot(z) 例: ?x=rand(100,1); ?z=x+y.*i; ?plot(z)
注:两个向量必须维数相同且同为行向量或列向量。 plot(X,Y) 第一个变量作为横坐标,第二个变量作为纵坐标。 例: ?x=0:0.01*pi:pi; ?y=sin(x).*cos(x); ?plot(x,y) 注:两个向量必须维数相同且同为行向量或列向量。
当X和Y为同阶矩阵时,按照矩阵的行或列操作,可以在同一幅图中绘出所有曲线。 例: ?x=0:0.01*pi:pi; ?y=[sin(x'),cos(x')]; ?plot([x',x'],y);
plot(X,Y,s) s参数: - 实线 . 点 * 星号 ^ 上三角 : 点线 o 圆 s 方形 < 左三角 - 实线 . 点 * 星号 ^ 上三角 : 点线 o 圆 s 方形 < 左三角 -. 点划线 x x符号 d 菱形 > 右三角 -- 虚线 + +号 v 下三角 p 正五边形 y 黄色 m 紫红色 c 蓝绿色 r 红色 g 绿色 b 蓝色 w 白色 k 黑色 上述参数的不同组合可以为图形设置不同的线形、颜色和标识,调用时以单引号来引用,各选项直接相连,不需要分隔符。
例: ?x=0:0.1*pi:pi; ?y=sin(x); ?z=cos(x); ?plot(x,y,'--k',x,z,'-.rd')
特殊二维图形函数 特殊坐标系的二维函数 对数坐标 semilogx、semilogy、loglog格式与plot类似。 例: ?x=1:0.1*pi:2*pi; ?y=sin(x); ?semilogx(x,y,'-*')
其中,theta为角向量,rho为幅向量,s为图形属性选项。 极坐标系 polar(theta,rho) polar(theta,rho,s) 其中,theta为角向量,rho为幅向量,s为图形属性选项。 例: ?x=1:0.01*pi:4*pi; ?y=sin(x/2)+x; ?polar(x,y,'-')
其中,fun、fun1、fun2可以为plot、semilogx、semilogy、loglog等。 例: plotyy(X1,Y1,X2,Y2) plotyy(X1,Y1,X2,Y2,fun) plotyy(X1,Y1,X2,Y2,fun1,fun2) 其中,fun、fun1、fun2可以为plot、semilogx、semilogy、loglog等。 例: ?x=1:0.1*pi:2*pi; ?y=sin(x); ?z=exp(x); ?plotyy(x,y,x,z,'plot','semilogy')
二维特殊函数图 area 填充绘图 fplot 函数图绘制 bar 条形图 hist 直方图 barh 水平条形图 pareto Pareto图 comet 彗星图 pie 饼状图 errorbar 误差带图 plotmatrix 分散矩阵图 ezplot 简单绘制函数图 ribbon 三位图的二维条状显示 ezpolar 简单绘制极坐标图 scatter 散射图 feather 矢量图 stem 离散序列饼状图 fill 多边形填充 stairs 阶梯图
例:绘制条形图 例:绘制矢量图 ?x=1:10; ?y=rand(10,1); ?bar(x,y); ?x=0:0.1*pi:2*pi; ?y=x.*sin(x); ?feather(x,y)
例:函数图形绘制 ?lim=[0,2*pi,-1,1]; ?fplot('[sin(x),cos(x)]',lim)
例:绘制饼图 ?x=[2 4 6 8]; ?pie(x)
N为所绘等高线的条数,V为输入向量,等高线的值为对应向量的元素值。 绘制等高线图 contour(Z,N/V) contour(X,Y,Z,N/V) N为所绘等高线的条数,V为输入向量,等高线的值为对应向量的元素值。 例: ?a=rosser; ?v=[-1000,-500,-100,0,100,500,1000]; ?contour(a,v) ?contourf(a,v)
三维图形 基本绘图命令 plot3函数 plot3(x,y,z) x,y,z为相同维数的向量,绘出这些向量表示的点的曲线。 plot3(X,Y,Z,s) s为定义线型的字符串。 plot3(x1,y1,z1,s1,x2,y2,s2,…)
例:绘三维螺旋线 ?x=0:pi/50:10*pi; ?y=sin(x); ?z=cos(x); ?plot3(x,y,z);
[X,Y]=meshgrid(x,y) x,y为给定向量,用来定义网格的划分区域和划分方法。矩阵X和Y为网格划分后的数据矩阵。 网图函数 [X,Y]=meshgrid(x,y) x,y为给定向量,用来定义网格的划分区域和划分方法。矩阵X和Y为网格划分后的数据矩阵。 例: ?[x,y]=meshgrid(-3:0.1:3,-2:0.1:2); ?z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); ?plot3(x,y,z)
mesh(X,Y,Z) 绘制彩色网格面图形 mesh(x,y,Z) x,y为两个向量,要求 [length(y),length(x)]=size(Z) mesh(Z) [m,n]=size(Z), 则使用x=1:n及y=1:m 例: ?x=-8:0.5:8;y=x'; ?a=ones(size(y))*x; ?b=y*ones(size(x)); ?c=sqrt(a.^2+b.^2)+eps; ?z=sin(c)./c; ?mesh(z)
meshc与mesh调用方式相同,且能绘制相应的等高线。 例: ?[x,y]=meshgrid([-4:0.5:4]); ?z=sqrt(x.^2+y.^2); ?meshc(z)
meshz与mesh调用方式相同,增加了边界面屏蔽。 例: ?[x,y]=meshgrid([-4:0.5:4]); ?z=sqrt(x.^2+y.^2); ?meshz(x,y,z)
着色函数 surf(X,Y,Z) 绘制着色的三维表面图,参数设置与mesh相同。 例: ?[x,y]=meshgrid([-4:0.5:4]); ?z=sqrt(x.^2+y.^2); ?surf(x,y,z)
三维等高线 例: ?waterfall(z) ?[x,y]=meshgrid([-4:0.5:4]); ?contour3(peaks(x,y),25);
特殊三维图形函数 bar3 三维条形图 surfc 着色与等高线结合 comet3 三维彗星轨迹图 trisurf 三角形表面图 ezgraph3 函数控制绘制三位图 trimesh 三角形网格图 pie3 三维饼状图 waterfall 瀑布图 scatter3 三维散射图 cylinder 柱面图 stem3 三维离散数据图 sphere 球面图
绘三维饼图 例: ?x=[2 4 6 8]; ?pie3(x,[0,0,1,0])
R为母线向量,N为旋转圆周上分割线的条数。 柱面图: [X,Y,Z]=cylinder(R,N) R为母线向量,N为旋转圆周上分割线的条数。 例:?x=0:pi/20:pi*3; ?r=5+cos(x); ?[a,b,c]=cylinder(r,30); ?mesh(a,b,c)
图形处理常用技术 图形控制 坐标轴控制函数 axis(V) V为坐标轴范围数组: 二维图形:V=[XMIN,XMAX,YMIN,YMAX] 三维图形:V=[XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX]
axis ‘控制字符串‘ auto 自动模式 axis 当前坐标设置固定 equal 控制各坐标轴的分度使其相等 square 使绘图区为正方形 normal 解除对坐标轴的任何限制 …
zoom ’控制字符串‘ 实现对二维图的缩放 on 允许对图形缩放 坐标轴缩放函数 zoom ’控制字符串‘ 实现对二维图的缩放 on 允许对图形缩放 off 禁止对图形缩放 (factor) 以factor为缩放因子进行坐标轴缩放 out 恢复所进行的一切缩放 xon 只允许对x轴进行缩放 yon 只允许对y轴进行缩放
平面坐标网格函数 grid on/off 显示和取消网格 坐标轴封闭函数 box on/off 四周显示坐标轴和常规坐标轴
图形的标注 坐标轴标注 title xlabel ylabel(‘标注’,’属性1’,属性值1,…) 例: ?x=0:0.1*pi:2*pi; ?y=sin(x); ?plot(x,y) ?xlabel('x(0~2\pi)','FontWeight','bold'); ?ylabel('y=sin(x)','FontWeight','bold'); ?title('正弦函数','Fontsize',12,'fontweight','bold','fontname','黑体')
特殊符号的输入 转义符号\ \alpha \Gamma \beta \Delta \gamma \Theta \delta \Lambda \epsilon \Xi \zeta \Pi \eta \omega \theta …
标注的显示控制 \bf 黑体 \it 斜体 \rm 标准形式 \fontname{fontname} 字体名 \fontsize(fontsize) 字体大小 特殊符号如”\”、”{“、”^“等,用”\”来引导。
上标和下标 调用符为”_”和”^”,相应的内容置于{ }内。 例: ?x=-10:0.1:10; ?y=exp(-x.^2/2); ?title('\bf y=e^{-x^{2}/2}')
text(x,y,’标注文本及控制字符串’) (x,y)为给定标注文本在途中添加的位置。 例: 文本标注 text(x,y,’标注文本及控制字符串’) (x,y)为给定标注文本在途中添加的位置。 例: ?x=1:0.1*pi:2*pi; ?y=sin(x); ?plot(x,y); ?text(3*pi/4,sin(3*pi/4),'\leftarrow sin(3\pi/4)=-7.707')
复杂文本标注 例: ?x=1:0.1*pi:2*pi; ?y=sin(x); ?plot(x,y); ?text(3*pi/4,sin(3*pi/4),['\leftarrow sin(3\pi/4)=',num2str(sin(3*pi/4))],'fontsize',12) ?text(5*pi/4,sin(5*pi/4),['sin(5\pi/4)=',num2str(sin(5*pi/4)),'\rightarrow'],... 'horizontalalignment','right','fontsize',12)
交互式文本标注 gtext(s) 执行时,图形中出现“十”字型交叉线供用户选择标注位置。S为标注内容的字符串,标注内容为多行时,s为一单元型字符数组。
图例标注 legend(‘标注1’,‘标注2’,…) 标注1、标注2等分别对应绘图过程中绘制的先后顺序的曲线。 例: ?x=1:0.1*pi:2*pi; ?y=sin(x); ?z=cos(x); ?plot(x,y,x,z) ?legend('sin(x)','cos(x)')
legend(‘标注’,…,’定位代号’) 定位代号: 0 自动定位 1 右上角 2 左上角 3 左下角 4 右下角 -1 右外侧
图形的保持和子图 图形的保持 hold on 启动图形保持功能,此后所有的图形都添加到当前的图形窗口中,系统会自动调整坐标。 hold off 关闭图形保持功能。 例: ?x=0:0.1*pi:2*pi; ?y=sin(x); ?z=cos(x); ?plot(x,y,'-*') ?hold on ?plot(x,z,'-o') ?plot(x,y+z,'-h') ?legend('sin(x)','cos(x)','sin(x)+cos(x)',0) ?hold off
子图 subplot(m,n,p) 将一个图形窗口分隔成m×n格区域,参数p指定子绘图区域。 例: ?x=0:0.1*pi:2*pi; ?plot(x,sin(x),'-*') ?title('sin(x)') ?subplot(2,2,2); ?plot(x,cos(x),'-o') ?title('cos(x)') ?subplot(2,2,3); ?plot(x,sin(x).*cos(x),'-x') ?title('sin(x)*cos(x)') ?subplot(2,2,4); ?plot(x,sin(x)+cos(x),'-h') ?title('sin(x)+cos(x)')
图形处理的高级技术 颜色 采用RGB色系,由矩阵[R,G,B]来表示颜色的映像。 R G B 颜色 黑色 1 白色 红色 绿色 蓝色 黄色 黑色 1 白色 红色 绿色 蓝色 黄色 洋红 青色 2/3 天蓝 1/2 橘黄 0.5 深红 灰色
常用的颜色映像(默认状态为64×3颜色矩阵) 颜色映像 相应颜色系 autumn 红黄色系 hsv 红色调饱和色系 bone 蓝色灰系 jet 蓝色调饱和色系 colorcube 增强颜色系 lines 线性色系 cool 青和洋红色系 pink 柔和色系 copper 铜色系 prism 棱镜色系 flag 红白蓝黑交替色系 spring 洋红、黄色系 gray 线性灰色色系 summer 绿黄色系 hot 黑红黄白色系 winter 蓝绿色系 vga Windows16位色系
着色过程 生成颜色映像 colormap(c) c为颜色映像矩阵,3列,行数不限 图形应用函数 如pcolor、colorbar等 着色方式 shading ‘c’ c为控制字符串,分别为faceted、interp和flat。其中faceted以平面作为着色单位,为默认形式;interp以插值形式为图形像点着色;flat以平滑形式着色。
pcolor(c) 以当前的颜色映像为矩阵c进行着色。 例: ?colormap(hot(80)) ?pcolor(rand(6,8)); ?shading interp
rgbplot(c) 将矩阵的三列值分别以红、绿、蓝绘出。
colorbar(‘vert’) %垂直显示颜色标尺 colorbar(‘horiz’) %水平显示颜色标尺 例: ?[x,y,z]=peaks; ?mesh(x,y,z); ?colormap(hot(80)); ?colorbar
brighten(beta) beta大于零时,增加当前的色彩强度;相反,当beta小于零时,削弱当前的颜色强度。
caxis([cmin,cmax]) [cmin,cmax]=caxis 函数自动控制图形中色彩和数值的对应关系。 colordef color none %将图形背景与窗口背景设为相同 color black %将图形背景设为黑色 color white %将图形背景设为白色
视觉与光照 视觉控制 view(az,el) az为方位角,即xy平面旋转的角度,顺时针方向旋转的角度为正;el为仰角,即从xy平面向z轴旋转的角度,朝向z轴的旋转(仰视)为正角度;单位均为度,而非弧度。 view(2) 二维图形中视角的默认值(0,90) view(3) 三维图形中视角的默认值(-37.5,30) [az,el]=view 返回当前图形的视角。
例: Z轴正方向俯视图 ?contourf(a,v) ?[x,y,z]=peaks; ?colormap(hsv(100)) ?mesh(x,y,z) ?view(0,90)
viewmtx 给出指定视角的正交转换矩阵。 ?a=viewmtx(0,90) a = 1.0000 0 0 0 0 1.0000 0.0000 0 0 -0.0000 1.0000 0 0 0 0 1.0000
rotate3d 触发图形窗口的Rotate3d选项,使用户可以方便的以鼠标来控制视角的变化。
属性包括Color, Style, Position和Visible等。 例: 光照控制 light(属性1,属性值1,属性2,属性值2,…) 属性包括Color, Style, Position和Visible等。 例: ?[x,y,z]=peaks; ?mesh(x,y,z) ?light('position',[1,1,1])
lighting ‘光源模式’ 光源模式为flat、gouraud、phong以及none等;其中flat为平面模式,光照单元为图形网格;gourand为点模式,光照单元为象素点;phong为以象素为光照基本单元,且计算各点的反射比;none为关闭图形光源功能。
material ‘表面控制模式’ 模式有shiny、dull、metal等,其中shiny使图形表面显示较为光亮的色彩模式,dull指表面显示较为阴暗的色彩模式,metal指表面呈现金属色泽模式。
surfl(X,Y,Z,S,K) S为光源控制变量具体形式为[Sx,Sy,Sz]光源位置和[az,el]视角;K为控制图形的表面形式,具体形式为[Ka,Kd,Ks,spread],其中,Ka表示背景光系数,Kd反映表面漫反射特性,Ks反映表面镜面反射特性,spread为镜面扩展因子。
例: ?[x,y,z]=peaks; ?surfl(x,y,z,[1,1,1,],[0.55,0.8,0.1,0.1])
光滑曲线 例: ?[x,y,z]=peaks; ?surf(x,y,z) ?shading interp
图像处理 用户可以对外部图形进行操作,或将MATLAB图形转换成其他图形类型。 A=imread(filename,fmt) filename为图形文件名,fmt为图形类型,如果图形为灰度图像,则返回值A为两列矩阵;如果图形为彩色,则返回值为三列矩阵。 matlab所识别的图形大致为jpeg、tiff、bmp、png、hdf、pcx和xwd。
imwrite(A,filename,fmt) 将图像矩阵写入外部文件,参数同imread。 imfinfo(filename,fmt) 返回一结构数组,反映图形详细的信息。 ?pictureinfo=imfinfo('s.jpg','jpg') pictureinfo = Filename: 's.jpg' FileModDate: '15-Jan-2002 15:57:54' FileSize: 14875 Format: 'jpg' FormatVersion: '' Width: 320 Height: 240 BitDepth: 24 ColorType: 'truecolor' FormatSignature: ''
image(c) 显示图形,c为图形数据矩阵。