第3章数据的可视化(Graphics)3.1二维绘图3.2特殊图形和坐标的绘制3.3MATLAB的图形窗口3.4基本三维绘图命令本章小结和练习3.1二维绘图(2-Dplotting)
3.1.1绘图的一般步骤1.曲线数据准备2.指定图形窗口和子图位置3.绘制图形4.设置坐标轴和图形注释5.仅对三维图形使用的着色和视点等设置6.图形的精细修饰7.按指定格式保存或导出图形3.1.2基本绘图函数
(Plottingfunction)MATLAB中最基本的绘图函数是绘制曲线函数plot。plot(y)%绘制以y为纵坐标的二维曲线plot(x,y)%绘制以x为横坐标y为纵坐标的二维曲线plot(x1,y1,x2,y2…)%在同一窗口绘制多条二维曲线图说明:x和y可以是实数向量或矩阵,也可以是复数向量或矩阵。例3-3
绘制矩阵y为2×3的曲线图>>y=[123;456];>>plot(y)>>y=peaks;%产生一个49*49的矩阵>>plot(y)y是2×3的矩阵,每列画一条曲线共3条,第一条线纵坐标画的是[14]两点。x和y为向量或矩阵时的plot(x,y),分别有以下几种情况:x是向量y是矩阵时x的长度与矩阵y的行数或列数必须相等,如果x的长度与y的每列元素个数相等,向量x与y的每列向量画一条曲线;如果x的长度与y的每行元素个数相等,则向量x与矩阵y的每行向量对应画一条曲线;如果y是方阵,x和y的行数和列数都相等,则向量x与矩阵y的每列向量画一条曲线。x是矩阵y是向量时y的长度必须等于x的行数或列数,绘制的方法与前一种相似。x和y都是矩阵时x和y大小必须相同,矩阵x的每列与y的每列画一条曲线。例3-4
绘制方波信号,如图3-4所示。>>x=[011223344];>>y=[110011001];>>plot(x,y)>>axis([0402])练习运行以下命令:>>x=[123;456];>>y=[12];>>plot(x,y,x,2*y)则在图形窗口中绘制______条曲线。
A.4B.6C.3D.5B例3-6x是矩阵,分别绘制x与y1和x与y2的曲线,已知y1是向量且长度与x的行数相等,y2是矩阵且与x尺寸相同。>>x=[1:4;2:5;3:6]x=123423453456>>y1=[123]%y1长度与x的行数相等y1=123>>plot(x,y1)plot(z)绘制复数数组曲线
参数z为复数数组时,plot(z)是以实部为横坐标,虚部为纵坐标绘制曲线,z可以是向量也可以是矩阵。z=1.0000+1.0000i2.0000+1.0000i3.0000+1.0000i4.0000+1.0000i2.0000+2.0000i3.0000+2.0000i4.0000+2.0000i5.0000+2.0000i3.0000+3.0000i4.0000+3.0000i5.0000+3.0000i6.0000+3.0000i>>plot(z)【例3-7】t是日期行向量,使用plot函数绘制在2022.10.1-2022.10.7期间的温度曲线。>>t1=datetime(2022,10,1);>>t2=caldays(0:6);%产生日期行向量>>t=t1+t2;>>Tempratures=[15,16,18,20,17,19,18];>>plot(t,Tempratures)3.1.3多个图形的绘制1.同一个窗口多个子图使用tiledlayout函数建立子图,使用nexttile依次指定不同图块;在之前的版本则使用subplot函数建立子图,各函数的命令格式如下:tiledlayout(m,n)%将窗口分成(m×n)幅子图nexttile%下一个子块
subplot(m,n,i)%将窗口分成(m×n)幅子图,第i幅为当前图例3-8
在同一个窗口中建立四个子图,在子图中分别绘制sin(x)、cos(x)、sin(2x)和cos(2x)曲线。x=0:0.1:10tiledlayout(2,2)nexttile%第一行左图plot(x,sin(x))nexttile%第一行右图plot(x,cos(x))nexttile%第二行左图plot(x,sin(2*x))nexttile%第二行右图plot(x,cos(2*x))例3-8
在同一个窗口中建立四个子图,在子图中分别绘制sin(x)、cos(x)、sin(2x)和cos(2x)曲线。%%使用subplot函数>>x=0:0.1:10;>>subplot(2,2,1)%第一行左图>>plot(x,sin(x))>>subplot(2,2,2)%第一行右图>>plot(x,cos(x))>>subplot(2,2,3)%第二行左图>>plot(x,sin(2*x))>>subplot(2,2,4)%第二行右图>>plot(x,cos(2*x))练习subplot(2,1,2)是指______的子图。
A.两行一列的上图B.两行一列的下图
C.两列一行的左图
D.两列一行的右图运行命令“>>figure(3)”,则执行______A.打开三个图形窗口B.打开一个图形窗口
C.打开图形文件名为“3.fig”
D.打开图形文件名为“figure3.fig”BD2.双纵坐标图双纵坐标图是指在同一个坐标系中使用左右两个不同刻度的坐标轴。yyaxisleft%绘制左边纵轴曲线yyaxisright%绘制右边纵轴曲线3.同一窗口多次叠绘使用hold命令可以保留原图形,使多个plot函数在一个坐标系中不断叠绘。holdon、holdoff、hold、holdall。4.指定图形窗口figure(n)%产生新图形窗口【例3-9】在同一窗口使用双纵坐标绘制电机的转速n与电磁转矩m随电流ia变化的曲线。>>ia=0:0.5:80;m=0.6*ia;>>n=1500-15*ia;>>figure(1)>>yyaxisleft,plot(ia,m)%左边坐标>>yyaxisright,plot(ia,n)%右边坐标>>figure(2)>>plotyy(ia,m,ia,n)3.1.4设置曲线绘制方式、坐标轴
和图形注释1.曲线的线型、颜色和数据点形在plot函数中还可以通过字符串参数来设置曲线的线型、颜色和数据点形等,命令格式如下:plot(x,y,s)说明:s为字符串,设置曲线的线型、颜色和数据点形等,线型、颜色与数据点形参数。颜色数据点间连线数据点形类型符号RGB三元组类型符号类型符号黄色紫红色青色红色绿色蓝色白色黑色y(Yellow)m(Magenta)c(Cyan)r(Red)g(Green)b(Blue)w(White)k(Black)[1,1,0][1,0,1][0,1,1][1,0,0][0,1,0][0,0,1][1,1,1][0,0,0]
实线(默认)点线点划线虚线-:-.--实点标记圆圈标记叉号形×十字形+星号标记*方块标记□钻石形标记
向下的三角形标记向上的三角形标记向左的三角形标记向右的三角形标记五角星标记☆六连形标记.ox+*sdv^<
>
ph例3-11
在图形中设置曲线的不同线型和颜色并绘制图形。>>x=0:0.2:10;>>y=exp(-x);>>plot(x,y,'ro-.')>>holdon>>z=sin(x);>>plot(x,z,'m+:','LineWidth',2,'MarkerEdgeColor','k','MarkerSize',10)2.设置坐标轴命令含义命令含义axisauto使用默认设置axisequal纵、横轴采用等长刻度axismanual使当前坐标范围不变,以后的图形都在当前坐标范围显示axisoff取消轴背景axisfill在manual方式下起作用,使坐标充满整个绘图区axistight把数据范围直接设为坐标范围axisvis3d保持高宽比不变,三维旋转时避免图形大小变化axison使用轴背景axisij矩阵式坐标,原点在左上方axissquare产生正方形坐标系axisxy普通直角坐标,原点在左下方axisnormal默认矩形坐标系axis([xmin,xmax,ymin,ymax])设定坐标范围,必须满足xmin %用鼠标从图形上获取n个点的坐标(x,y)说明:参数n应为正整数,是通过鼠标从图上获得数据点的个数;x、y用来存放所取点的坐标是列向量,每次获取的坐标点为列向量的一个元素。练习在0~10的坐标轴范围内,在图中间绘制一条水平线,一条垂直线实现十字交叉。len=10;x=0:0.02:len;y=0:0.02:len;xlen=length(x);plot(x,len/2*ones(xlen))holdonplot(len/2*ones(xlen),y)3.2特殊图形和坐标的绘制(SpecializedPlotting) 3.饼形图饼形图适用于显示向量或矩阵中各元素占总和的百分比。pie(x,explode,'label')%画二维饼形图x是向量,用于绘制饼形图;explode是与x同长度的向量,用来决定是否从饼图中分离对应的一部分块,非零元素表示该部分需要分离;'label'是用来标注饼形图的字符串数组。练习:例3-174.直方图直方图又称为频数直方图,适于显示数据集的分布情况并具有统计的功能。histogram(y,n)%统计每段的元素个数并画出直方图h=histogram(y,n)%获取直方图对象说明:n分段的个数,n省略时则默认为分成10段;x是向量,用于指定所分每个数据段的中间值;y可以是向量或矩阵,如果是矩阵则按列分段;N是每段元素个数,N可省略,省略时绘制图形。例3-17 绘制直方图统计并显示数据。>>x=randn(20,1);%产生20个正态分布随机数>>tiledlayout(2,1);nexttile;>>histogram(x,20);%分20段>>nexttile;>>h=histogram(x,-3:1:3)%确定每段边界>>n=h.Values%获取每段的数据练习已知某班10个同学的成绩为65、98、68、75、88、78、82、94、85、36,分别统计并绘制60分以下、60-70、70-80、80-90、90-100分数段的人数图;并使用饼形图显示各分数段所占的百分比。 x=[65,98,68,75,88,78,82,94,85,36];N=histogram(x,60:10:100)n1=N.Valuesn2=length(x)-sum(n1) 根据y=1-sin(θ)绘制笛卡尔坐标和极坐标图,θ=0:0.1:2*pi+0.1>>theta=0:0.1:2*pi+0.1;>>subplot(1,2,1)>>y=1-sin(theta);>>plot(theta,y)>>subplot(1,2,2)>>polar(theta,y)练习2.对数坐标图对数坐标图是指坐标轴的刻度不是线性刻度而是对数刻度,semilogx和semilogy函数分别绘制对X轴和Y轴的半对数坐标图,loglog是双对数坐标图。semilogx(x1,y1,'线型',x2,y2,'线型',……)%绘制x为对数的多条曲线semilogy(x1,y1,'线型',x2,y2,'线型',……)%绘制y为对数的多条曲线loglog(x1,y1,'线型',x2,y2,'线型',……)%绘制x、y都为对数的多条曲线例3-23 计算对数幅频特性,横坐标为w按对数坐标。>>w=logspace(-1,2,10);>>Lw=-20*log10(sqrt((0.05*w).^2+1));>>semilogx(w,Lw)>>loglog(w,Lw)3.3MATLAB的图形窗口 3.3.1图形窗口界面1.工具栏MATLAB图形窗口有三个工具栏,包括图形窗口工具栏、照相工具栏和绘图编辑工具栏。2.菜单图形窗口的菜单包括“File”、“Edit”、“View”、“Insert”、“Tools”、“Desktop”、“Window”和“Help”。3.面板交互式图形工具主要包括图形面板、绘图浏览器和属性编辑器三个面板。输入:>>plottools绘制y=sin(2*x)的曲线,并使用图形窗口的图形面板、绘图浏览器和属性编辑器添加文字和箭头。练习3.3.2图形的打印和输出1.图形的打印在MATLAB中对图形打印可以通过打印预览窗口进行设置,可以设置打印到纸或文件,并可以进行页面设置、打印预览。2.图形的输出在MATLAB中导出图形文件使用菜单“File”→“ExportSetup…” 。图形文件的保存格式有.fig、.bmp、.emf、.jpg、.pdf、.tif、.pcx和.png等常用图形文件格式。3.4基本三维绘图命令(3-DGraphs) 3.4.1三维曲线图(LinePlots)plot3(x,y,z,'线型')%绘制三维曲线说明:x,y,z必须是相同尺寸的数组,当是向量时则绘制一条三维曲线,当是矩阵时绘制多条曲线,三维曲线的条数等于矩阵的列数。3.4.2三维曲面图三维曲面图包括三维网线图和三维表面图,三维曲面图与三维曲线图的不同是三维曲线图是以线来定义而三维曲面图是以面来定义,因此面上的点都要连接起来。1.产生矩形网格[X,Y]=meshgrid(x,y)%产生XY矩形网格说明:x和y分别是有n个和m个元素的一维数组,X和Y都是n×m的矩阵,每个(X,Y)对应一个网格点;如果y省略,则X和Y都是n×n的矩阵。2.三维网线图三维网线图就是将平面上的网格点(X,Y)对应z值的顶点画出,并将各顶点用线连接起来。mesh(X,Y,Z,C)%绘制网格点数据对应的三维网线例3-27 绘制z=x2+y2的三维网线图>>x=0:10;>>[X,Y]=meshgrid(x)%y省略则表示x=y>>Z=X.^2+Y.^2;>>mesh(X,Y,Z)3.三维表面图三维表面图与网线图相似,但不同的是网线图中网格范围内的区域为空白,而三维表面图则用颜色来填充。surf(X,Y,Z,C)%绘制网格点数据对应的三维表面图另外,surf函数还有两个派生的函数surfc和surfl,surfc用来绘制三维表面图并加等高线,surfl用来绘制三维表面图并加光照效果。3.4.3圆柱体、球体和椭圆体MATLAB中绘制的三维立体图形的函数还有cylinder圆柱体、sphere球体和ellipsoid椭圆体。