第3章〓二维绘图 强大的绘图功能是MATLAB的特点之一,MATLAB提供了一系列的绘图函数,包括采用不同坐标系,如直角坐标、对数坐标、极坐标绘制二维图形和三维图形的绘图函数。 二维图形是MATLAB图形的基础,也是应用最广泛的图形类型之一。本章主要介绍MATLAB提供的二维图形绘制函数。 【知识要点】 本章主要内容包括MATLAB基本二维绘图指令和其他二维图形绘图函数。 【学习目标】 知识点 学习目标 了解理解掌握运用 最基本的二维绘图函数★★ 绘制二维图形的其他函数★ 在科学计算中,往往要处理大量的数据。如果把这些数据用图形表现出来,就能很容易地发现这些数据的内在联系,大大提高工作效率。MATLAB正是基于这种考虑,提供了强大的绘图能力,可将矩阵中的数值可视化,如图31所示。 图31矩阵可视化 视频讲解 3.1最基本的二维绘图函数◆ 3.1.1绘制二维曲线的最基本的函数 二维曲线图绘制需要调用plot命令。 调用格式: plot(x,y) 说明: 以x为横坐标,y为纵坐标,按照坐标(xj,yj)的有序排列绘制曲线。 【例31】绘制0到2π的正弦曲线。在命令行窗口中键入: x=0:pi/100:2*pi;%构造向量 y=sin(x);%构造对应y的坐标 plot(x,y)%绘制以x为横坐标,y为纵坐标的图形 绘制的二维图形如图32所示。 图32函数plot(x,y)绘制的正弦曲线 3.1.2绘制图形的类型 可利用plot函数绘制多条曲线。 调用格式: plot(X1,Y1,X2,Y2,…,Xn,Yn) plot自动循环地采用颜色板中的各种颜色。 【例32】绘制0到2π的正弦曲线和余弦曲线。 在命令行窗口中键入: x=0:pi/100:2*pi;%构造向量 y1=sin(x); %构造对应y1的坐标 y2=cos(x); %构造对应y2的坐标 plot(x,y1,x,y2) %绘制以x为横坐标,y1和y2为纵坐标的图形 绘制的二维图形如图33所示。 图33函数plot(x,y)绘制的正弦和余弦曲线 通常,为了突出图表可视化的效果,常常会对线型、标记符号和颜色进行样式的设置。 调用格式: plot(X,Y,'选项') 其中: 选项用于指定线型、标记和颜色,但线条的类型和颜色可以通过字符串来指定。表31列出了在这个字符串中允许使用的线条类型和颜色,线条默认(none)类型是实线型。 表31点类型、线类型和颜色 符号点类型符号线类型 ·黑点–实线 *星号虚线 s或square正方形.点画线 d或diamond菱形:点线 p或pentagram五角星型默认(none)无线 h或hexagram六角星型 °圆圈符号颜色 +加号g绿色 ×叉号m品红色 <向左尖三角b蓝色 >向右尖三角c灰色 ∧向上尖三角w白色 ∨向下尖三角r红色 默认(none)无点k黑色 y黄色 【例33】绘制函数sinx、cosx和sinx+π4在0~2π的曲线。 在命令行窗口中键入: x=0:pi/100:2*pi;%构造向量 y1=sin(x); %构造对应y1的坐标 y2=cos(x); %构造对应y2的坐标 y3=sin(x+pi/4); plot(x,y1,'m-*',x,y2,'b -- p',x,y3,'g -- .') %绘制以x为横坐标,y1和y2为纵坐标的图形 绘制的二维图形如图34所示。 图34函数plot(x,y)绘制的正弦(相位0和π/4)和余弦曲线 3.1.3图形格式和注释 绘制函数后,还应该给图形进行标注,以增强图形的可读性,如给每个图加上标题、坐标轴标记和曲线说明等。表32列出了图形标注常用函数及示例。 表32图形标注常用函数及示例 函数示例 title—添加标题 格式: title('图形名称')title ('两条相交曲线') xlabel—为坐标轴添加标签 格式: xlabel('x轴说明')xlabel ('自变量x') ylabel ('函数值y') axis—设置坐标轴范围和纵横比 格式: axis([xmin xmax ymin ymax])axis([0 6 -1 1]) text—向数据点添加文本说明 格式: text(x,y, '图形说明')text (1.2, 0.8, 'x =0.989899') text (3.2, 0.2, 'x = 3.0404') text (1.8, 0.4, '1/sinh(x)') text (0.3, 0.2, 'sin(x)') grid —显示或隐藏坐标区网格线 格式: grid on grid offgrid on legend —在坐标区上添加图例 格式: legend('图例1')legend('cos(x) ', '1/cosh(x) ', 'Location', 'NorthEast') hold—图形保持 格式: hold on/off hold on line—绘制基本线条 格式: line (x,y) line([0.989899 0.989899],[-11]); line([3.0404 3.0404],[-1 1],'Color','red'); 【例34】绘制0到7的正弦曲线sin(x)和双曲正弦曲线的倒数1/sinh(x),并为图添加标题、为坐标轴添加标签、添加图例、添加文本说明等。 在命令行窗口中键入: x = linspace(0,7,100); plot(x, sin (x), 'r--', x, 1./sinh(x), 'b-') xlabel ('自变量x')%坐标轴标签 ylabel ('函数值y') title ('两条相交曲线') text (1.2, 0.8, 'x =0.989899') %文本说明 text (3.2, 0.2, 'x = 3.0404') text (1.8, 0.4, '1/sinh(x)') text (0.3, 0.2, 'sin(x)') legend('sin(x) ', '1/sinh(x) ', 'Location', 'NorthEast') %图例 axis([0 7 -1 1])%坐标轴范围 grid on%显示网格线 line([0.989899 0.989899],[-11]); %绘制线条 line([3.0404 3.0404],[-1 1],'Color','red'); %绘制线条并设置颜色 绘制的二维图形如图35所示。 图35正弦sin(x)和双曲正弦倒数1/sinh(x)曲线 也可以将plot与line命令合并,代码如下: plot(x, sin (x), 'r--', x, 1./sinh(x), 'b-', [0.989899, 0.989899], [-1, 1], [3.0404,3.0404], [-1, 1],'m') 绘制的二维图形如图36所示。 在图37中,可以显示鼠标所选的图形上某点的坐标值; 在图38中,通过放大镜图标可实现图形的缩放。 在显示的图像中,单击“编辑”→“图窗属性”,就可以修改图形的颜色、线型、线宽等,如图39所示。 图36plot与line命令合并绘制的正弦sin(x)和 双曲正弦倒数1/sinh(x)曲线 图37显示鼠标所选的图形上某点的坐标值 图38通过放大镜图标实现图形的缩放 图39图窗属性的编辑 3.1.4叠加图绘制 在默认情况下,多个图形的绘制在执行第二个plot语句时,将删除第一个plot。在同一坐标轴中绘制多个图形有多种方法。 一种方法是前面介绍的,调用plot(X1,Y1,X2,Y2,…,Xn,Yn)绘制多条曲线。 x=0:pi/100:2*pi;%构造向量 y1=sin(x);%构造对应y1的坐标 y2=cos(x);%构造对应y2的坐标 y3=sin(x+pi/4); %构造对应y3的坐标 plot(x,y1,'r-',x,y2,'g--',x,y3,'b :') %绘制以x为横坐标,y1、y2为纵坐标的图形 所绘制的曲线如图310所示。 图310叠加图形的绘制 另一种方法是使用hold命令。可以使用hold on命令使当前坐标轴及图形保持而不被刷新,使随后绘制的图形叠加到现有图形中。hold off命令为关闭图形保持功能,不能在当前坐标轴上再绘制图形。通常每次绘图结束就采用hold off将所画曲线清除。 【例35】在同一坐标轴中绘制-π到π的sinx、cosx、sin(x)+cos(x)三条曲线,并以不同线型进行区分。 程序如下: x=-pi:pi/30:pi;%构造向量 y1=sin(x);%构造对应y1的坐标 plot(x,y1,'r--') %绘制以x为横坐标,y1为纵坐标的图形 hold on y2=cos(x);%构造对应y2的坐标 plot(x,y2,'b:*') %绘制以x为横坐标, y2为纵坐标的图形 hold on y3= sin(x)+cos(x); plot(x,y3,'g-.^') %绘制以x为横坐标,y3为纵坐标的图形 hold off 在同一坐标轴中绘制的三条曲线如图311所示。 图311在同一坐标轴中绘制的三条曲线 3.1.5子图绘制 在图311中三条曲线挤在同一张图中,某些情况下这样的布局比较好,但在有些情况下则需要将多个曲线分开到不同的子图中绘制。如果想要在一张图中展示多个子图,单纯使用plot函数就很难解决了。 如果希望在同一个图形窗口中同时绘制多幅相互独立的子图,每个子图也是一个独立的坐标系,需要调用subplot命令。 调用格式: subplot(m,n,k)或subplot(mnk) 说明: 将当前图形窗口分成m×n个绘图区,即共m行,每行n个,子绘图区的编号按行优先从左到右编号。该函数选定第k个子图为当前活动区。在每一个子绘图区允许以不同的坐标系单独绘制图形。subplot本身并不绘制任何图形,但决定了如何分割图形窗口以及下一幅图将被绘制在哪个子窗口中。 【例36】将例35中的三幅图分别绘制在子窗口中。 程序如下: x=-pi:pi/10:pi; subplot(2,2,1); plot(x,sin(x),'r--'); subplot(223); plot(x,cos(x),'b:*'); subplot(2,2,[2 4]); plot(x,sin(x)+cos(x),'g-.^'); 绘制的曲线如图312所示。 图312在同一坐标轴中绘制多图的例子 subplot(2,2,1)将原始的图像切割为4个子图,是2行2列,并将图绘制在第一个子图区域上; subplot(2,2,[2 4])将图像绘制在第2个和第4个子图区域上。 3.1.6复制/粘贴图 在图窗菜单中选择“编辑”→“复制选项”,进入预设项界面,设置剪贴板格式和图窗背景色。选择图元文件并使用图窗颜色,如图313所示。 图313设置剪贴板格式和图窗背景色 选择“编辑”→“复制图窗”,将图窗复制到系统剪贴板,如图314所示。 图314复制/粘贴图 3.1.7保存图形 可以将图窗保存为特定的文件格式,图形可以保存为多种格式(fig、eps、jpeg、gif、png、bmp等),常用图形保存格式如表33所示。 表33常用图形保存格式 扩展名文件生成格式 .figfig文件包含了所有信息,包括图窗和内容,可以后期修改 .bmp未压缩的图像 .eps高质量可缩放格式(用latex编辑时用),用PostScript语言描述的一种ASCII图形文件格式,在PostScript图形打印机上能打印出高品质的图形图像,最高能表示32位图形图像 .pdf压缩的图像 使用交互式控件保存绘图,单击坐标区工具栏中的导出按钮 ,MATLAB 显示包含文件类型选项的“另存为”对话框,如图315所示。 图315图形保存及格式选择 从R2016a开始,保存的图窗大小默认情况下与屏幕上的图窗大小一致。 也可以用编程方式将绘图保存为图像或向量图形文件。 调用格式: saveas(fig,filename) 表34为图形保存位图图像格式。 表34图形保存位图图像格式 选项位图图像格式默认文件扩展名 'jpeg'JPEG 24位.jpg 'png'PNG 24位.png 'tiff'TIFF 24位(压缩).tiff 'bmp'BMP 24位.bmp 'bmpmono'BMP 黑白.bmp 'bmp256'BMP 8位(256色).bmp 表35为图形保存矢量图格式。 表35图形保存矢量图格式 文 件 格 式矢量图格式默认文件扩展名 'pdf'整页可移植文档格式(PDF)颜色.pdf 'eps'PostScript(EPS) 3级黑白.eps 'epsc'封装的PostScript(EPS) 3级彩色.eps 'meta'增强型图元文件(仅限Windows).emf 'svg'SVG指可伸缩矢量图形(Scalable Vector Graphics).svg 'ps'全页PostScript (PS) 3级黑白.ps 'psc'全页PostScript (PS) 3 级彩色.ps 'ps2'全页PostScript (PS) 2级黑白.ps 'psc2'全页PostScript (PS) 2 级彩色.ps 【例37】创建一个条形图并获取当前图窗,然后将该图窗另存为 PNG 文件。 程序如下: x = [2 4 7 2 4 5 2 5 1 4]; bar(x); saveas(gcf,'Barchart.png')% gcf当前图窗的句柄 如果希望清晰度很高的话,saveas就无法处理了,因为分辨率太高,此时就需要函数print。 从R2020a开始,可以使用 exportgraphics 函数保存下列任一项的内容: 坐标区、图窗、可作为图窗子级的图、分块图布局或容器(如面板)。exportgraphics 函数支持三种图像格式(PNG、JPEG和TIFF)和三种同时支持向量和图像内容的格式(PDF、EPS和EMF)。PDF格式支持嵌入字体。 当需要执行以下操作时,exportgraphics函数比 saveas 函数更合适: 保存在App或 MATLAB Online 中显示的图形; 最小化内容周围的空白; 用可嵌入的字体保存PDF片段; 保存图窗中内容的一部分; 控制背景颜色,而不必修改图窗的属性。 【例38】创建一个条形图并获取当前图窗,然后将该图窗另存为 PNG 文件。在本例中,指定每英寸 300点(DPI)的输出分辨率。 程序如下: bar([1 11 7 8 2 2 9 3 6]) f = gcf; % Requires R2020a or later exportgraphics(f,'barchart.png','Resolution',300) 视频讲解 3.2线性直角坐标系其他二维图形绘制函数◆ 除了绘制二维曲线的基本函数plot外,在线性直角坐标系中,其他形式的图形还有火柴杆图、条形图、阶梯图和填充图等。 3.2.1双纵轴坐标 plotyy函数能把具有不同量纲、不同数量级的两个函数绘制在同一坐标中。 调用格式: plotyy(x1,y1,x2,y2) 其中: x1y1对应一条曲线,x2y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1y1数据对,右纵坐标用于x2y2数据对。 【例39】在同一坐标中绘制y1=200e-0.05x·sinx和y2=0.8e-0.5x·sin(10x)。 程序如下: %% 使用plotyy画两条曲线 clear; clc; close all; x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); plotyy(x,y1,x,y2);% 两条曲线 title('双纵轴坐标曲线');% 显示标题 绘制的曲线如图316所示。 图316双纵轴坐标曲线图 3.2.2火柴杆图 stem函数常用于绘制离散数据的图形,画出的图形是火柴杆图或戴着“帽子”的“棒棒糖图”,在数字信号处理中应用较多。 调用格式: stem(x,y,'选项') 【例310】绘制正弦函数sinx的火柴杆图。 程序如下: %% 杆状图 clear; clc; close all; x = linspace(0, 4*pi, 40); y = sin(x); subplot(1,2,1); stem(y);% 杆状图 subplot(1,2,2); stem(y,'fill','r');% 杆状图 绘制的正弦曲线火柴杆图如图317所示。 图317正弦曲线火柴杆图 3.2.3条形图 bar函数用于绘制二维垂直条形图,用垂直条形显示向量或矩阵中的值。 调用格式: bar(x,y,'选项') 其中“选项”默认条形图为堆栈(垂直)的。 【例311】分别绘制向量x=[1 2 5 4 8]和y=[x;1:5]的一维矢量x条形图和二维矢量x,y条形图。 程序如下: clear; clc; close all; x = [1 2 5 4 8];% 矢量x y = [x;1:5];% 矢量y subplot(1,2,1); bar(x); % 一维条形图 title('一维矢量x条形图'); subplot(1,2,2); bar(y); % 二维条形图 title('二维矢量x,y条形图'); 绘制的条形图如图318所示。 图318条形图 若将条形图变成水平的,则在bar后面加一个horizontal的首字母。 调用格式: barh(y,'选项') 【例312】分别绘制向量x = [1 2 5 4 8]和y = [x; 1: 5]的堆栈式的条形图和水平式的条形图。 程序如下: x=[1 2 5 4 8]; y=[x;1:5]; subplot(1,2,1); bar(y,'stacked');%堆栈式的bar title('堆栈式的条形图'); subplot(1,2,2); barh(y);%水平式的bar title('水平式的条形图'); 绘制的条形图如图319所示。 图319条形图 3.2.4阶梯图 stairs函数有助于理解数据阶梯形的变化趋势,主要用于绘制数字信号处理中的采样信号。另外,stairs函数在图像处理中的直方图均衡化技术中有很大的意义。 调用格式: stairs(x,y,'选项') 【例313】绘制正弦函数sinx的阶梯图。 程序如下: %% 阶梯图 clear; clc; close all; x = linspace(0, 4*pi, 40); y = sin(x); stairs(y);% 阶梯图 绘制的阶梯图如图320所示。 图320阶梯图 3.2.5填充图 fill函数按向量元素下标渐增次序用直线段连接x,y对应元素定义的数据点。假如这样连接所得折线不封闭,那么MATLAB将自动把该折线的首尾连接起来,构成封闭多边形,然后将多边形内部涂满指定的颜色。 调用格式: fill(x1,y1,'选项1',x2,y2,'选项2',…) 【例314】绘制y=2e-0.5x的填充图。 程序如下: x=0:0.35:7; y=2*exp(-0.5*x); fill(x,y,'r'); title('填充图'); axis([0,7,0,2]); xlabel ('自变量x') ylabel ('函数值y') 绘制的填充图如图321所示。 图321填充图 【例315】绘制一个红底白字的八边形STOP标识。 程序如下: t=(1:2:15)'*pi/8;%画八边形的八个角 y=sin(t); x=cos(t); fill(x,y,'r');%填充 axis square off; text(0,0,'STOP','color','w','fontsize',80,'fontweight','bold','horizontalalignment','center'); 绘制的红底白字八边形STOP标识如图322所示。 彩色图片 图322红底白字八边形STOP标识 视频讲解 3.3特殊坐标系二维图形绘制函数◆ 在使用基本的绘图函数时,坐标轴刻度为线性刻度。当自变量的少许变化引起因变量极大变化时,即当实际的数据呈指数变化时,使用对数坐标系可使曲线最大变化范围伸长,图形轮廓更加清楚,起到压缩坐标、扩大视野的作用。 在平面直角坐标系中表示两点间的关系只能使用三角函数来表示,而在极坐标系中用夹角和距离则很容易表示,甚至对于某些曲线来说,只有极坐标方程能够表示。极坐标系的应用领域十分广泛,包括数学、物理、工程、航海以及机器人等领域。 3.3.1极坐标绘图 polar函数用来绘制极坐标图。 调用格式: polar(theta,rho,'选项') 其中: theta为极坐标极角,rho为极坐标矢径,“选项”的内容与plot函数相似。 【例316】 绘制ρ=2sin(4θ)·cos(2θ)的极坐标图。 程序如下: theta=0:0.01:2*pi; rho=2*sin(4*theta).*cos(2*theta); polar(theta,rho,'r'); 绘制的极坐标图如图323所示。 图323极坐标图 3.3.2半对数和双对数坐标系绘图 MATLAB提供了绘制半对数和双对数坐标曲线的函数,半对数semilogx表示x轴以对数尺度绘图,半对数semilogy表示y轴以对数尺度绘图,loglog表示x轴和y轴都以对数尺度绘图。 调用格式: semilogx(x1,y1,'选项1',x2,y2,'选项2',...) semilogy(x1,y1, '选项1',x2,y2,'选项2',...) loglog(x1,y1,'选项1',x2,y2,'选项2',...) 【例317】绘制y=5x2的自然对数和对数坐标(半对数和双对数坐标)曲线图。 程序如下: clear ;clc; close all; x=0:0.1:100; y=5*x.*x; subplot(2,2,1); plot(x,log(y)); title('自然对数曲线'); grid on; subplot(2,2,2); semilogx(x,y); title('半对数曲线(x轴刻度)'); grid on; subplot(2,2,3); semilogy(x,y); title('半对数曲线(y轴刻度)'); grid on; subplot(2,2,4); loglog(x,y); title('双对数曲线'); grid on; 绘制的对数坐标曲线如图324所示。 图324对数坐标曲线 3.4其他形式二维特殊图形绘制函数◆ 在MATLAB中,除了可以通过最基本的二维绘图函数plot、直角坐标系其他二维图形绘制函数、常见的特殊二维图形函数等绘制图形外,还可以通过一些特殊函数绘饼图、直方图、散点图等特殊图形。 3.4.1饼图 pie函数用于绘制饼图。 调用格式: pie(x) 【例318】某次考试优秀、良好、中等、及格、不及格的人数分别为: 7,17,23,19,5,试用饼图进行成绩统计分析。 程序如下: pie([7,17,23,19,5]); title('饼图'); legend('优秀','良好','中等','及格','不及格'); 绘制的饼图如图325所示。 图325饼图 【例319】某统计数据所占百分比分为10%、15%、20%、30%。试绘制该统计数据的饼图。绘制饼图并将第四个饼图提取出来。试绘制该统计数据的三维饼图,并且将最后一个提取出来。 程序如下: %% 饼图 clear; clc; close all; a = [10 15 20 30];% 数据的占比 subplot(1,3,1); pie(a);% 画出饼图,并且自动计算出百分比 subplot(1,3,2); pie(a, [0,0,0,1]); % 将第四个饼图提取出来 subplot(1,3,3); pie3(a, [0,0,0,1]);% 画三维饼图,并且最后一个提取出来 绘制的饼图如图326所示。 图326统计数据的饼图 3.4.2直方图 在旧版本中hist函数用于绘制二维条形直方图,可以显示出数据的分布情况,但由于该函数适用于某些常规用途,总体能力有限,故新版本中用histogram函数替换了旧的hist函数。 调用格式: histogram(x) 【例320】绘制1000个随机数的直方图。 程序如下: y=randn(1,1000);%由randn函数产生1000个随机数 subplot(2,1,1); histogram(y,10);%包含10个长矩形 title('长矩形数 Bins = 10'); subplot(2,1,2); histogram(y,50);%包含50个长矩形 title('长矩形数 Bins = 50'); 绘制的随机数直方图如图327所示。 图327随机数直方图 3.4.3填充区二维图 area函数用来绘制填充区二维图。 调用格式: area(x,Y) 说明: 绘制Y中的值对x坐标的图。然后,该函数根据Y的形状填充曲线之间的区域: ①如果Y是向量,则该图包含一条曲线,area填充该曲线和水平轴之间的区域。②如果Y是矩阵,则该图对Y中的每列都包含一条曲线,area填充这些曲线之间的区域并堆叠它们,从而显示在每个x坐标处每个行元素在总高度中的相对量。 【例321】绘制向量x=[10 11 12],矩阵Y=[21.6 25.4; 70.8 66.1; 58.0 43.6]的填充区二维图。假设 x 为一个包含三个汽车经销商 ID的向量,Y 表示每个车型售出的汽车数量。 程序如下: x = [10 11 12]; Y = [21.6 25.4; 70.8 66.1; 58.0 43.6]; area(x,Y) xlabel('汽车经销商 ID') ylabel('汽车销售量') legend({'模型 A','模型 B'}) 绘制的每个车型售出的汽车数量填充区二维图如图328所示。 图328每个车型售出的汽车数量填充区二维图 3.4.4散点图 scatter函数用于绘制散点图。 调用格式: scatter(x,y,s,c) 说明: 以x的值为横坐标,以y的值为纵坐标,绘制散点。参数s设置散点的大小,参数c设置散点的颜色。 【例322】绘制余弦加均匀分布随机数的散点图。 程序如下: x=linspace(0,3*pi,200); y=cos(x)+rand(1,200);%余弦加均匀分布随机数 sc=25; c=linspace(1,10,length(x)); scatter(x,y,sc,c,'filled') title('余弦加均匀分布随机数的散点图'); 绘制的余弦加均匀分布随机数的散点图如图329所示。 图329余弦加均匀分布随机数的散点图 3.4.5散点图矩阵 plotmatrix函数可用来绘制散点图矩阵。 调用格式: plotmatrix(x) 说明: 该函数相当于plotmatrix(x,x),当参数x为p×n的矩阵时,绘制出的是n×n个散点图。该图的对角块画出的是矩阵x的每列数据的频数直方图。 【例323】产生正态分布随机数,并绘制散点图矩阵。 程序如下: X = randn(50,3);%正态分布随机数,产生50x3矩阵 plotmatrix(X); title('正态分布随机数散点图矩阵'); 绘制的正态分布随机数散点图矩阵如图330所示。 图330正态分布随机数散点图矩阵 3.4.6箱形图或盒图 boxplot函数用来绘制箱形图,即用箱形图可视化汇总统计量。 调用格式: boxplot(x) 如果x是向量,boxplot 绘制一个箱子。如果x是矩阵,boxplot为 x 的每列绘制一个箱子。 在每个箱子上,中心标记表示中位数,箱子的底边和顶边分别表示第25个和第75个百分位数。虚线会延伸到不是离群值的最远端数据点,离群值会以“+”符号单独绘制。 【例324】已知一组测量数据,其矩阵形式为: x=0.75820.98090.90890.94810.95290.93650.83070.82700.92540.76010.97080.88590.84750.94490.91000.91980.85990.95390.77210.7754 绘制该矩阵的箱形图。 程序如下: x=[0.7582 0.9809 0.9089 0.9841 0.9529 0.9365 0.8307 0.8270 0.9254 0.7601 0.9708 0.8859 0.8475 0.9449 0.9100 0.9198 0.8599 0.9539 0.7721 0.7754]; boxplot(x) title('测量数据的箱形图') 绘制的测量数据的箱形图如图331所示。 图331测量数据的箱形图 3.4.7误差条 errorbar函数可以绘制误差条图,它是统计学中常用的图形,涉及数据的“平均值”和“标准差”。 调用函数: errorbar(x,y,err) 说明: 绘制y对x的图,并在每个数据点处绘制一个垂直误差条,总误差条长度是误差err值的两倍。 【例325】绘制正弦函数sinx在0到2π范围内带垂直误差条的线图、带水平误差条的线图和带垂直和水平误差条的线图。误差值已给定。 程序如下: x=0:pi/10:2*pi; y=sin(x); err = 0.3*ones(size(y));%给定误差值 subplot(311) errorbar(x,y,err)%创建带垂直误差条的线图 title('带垂直误差条的线图'); subplot(312) errorbar(x,y,err,'horizontal')%创建带水平误差条的线图 title('带水平误差条的线图'); subplot(313) errorbar(x,y,err,'both','-s','MarkerSize',10,... 'MarkerEdgeColor','red','MarkerFaceColor','red')%创建带垂直和水平误差条的线图 title('带垂直和水平误差条的线图'); 绘制的误差条线图如图332所示。 图332误差条线图 3.4.8罗盘图 compass函数用来绘制一个从原点出发、由(x,y)组成的向量箭头图形,也称罗盘图。 调用格式: compass(x,y) 【例326】绘制向量x=[1 -3 5 -6 8 9],y=[5 7 -9 12 15 -9]的罗盘图。 程序如下: %%绘制罗盘图 clear ;clc; close all; x=[1 -3 5 -6 8 9]; y=[5 7 -9 12 15 -9]; figure; compass(x,y,'r'); 绘制的罗盘图如图333所示。 图333罗盘图 【例327】绘制复数3+2i,5.5-i和-1.5+5i的相量图。 程序如下: compass([3+2i,5.5-i,-1.5+5i]); title('相量图'); 绘制的复数相量图如图334所示。 图334复数相量图 3.4.9羽毛图 feather函数用来绘制羽毛图(速度向量图),创建以x轴为起点的箭头。 调用格式: feather(x,y) 【例328】绘制向量x=[1 3 5 6 8 9] 和y=[5 7 -9 3 -5 2]的羽毛图。 程序如下: %% 绘制羽毛图 clear;clc; close all; x=[1 3 5 6 8 9]; y=[5 7 -9 3 -5 2]; figure; feather(x,y); 绘制的向量羽毛图如图335所示。 图335向量羽毛图 3.4.10箭头图或向量场图 quiver函数用来绘制箭头图或向量场图。 调用格式: quiver(x,y,u,v) 说明: quiver(x,y,u,v)函数可在坐标(x,y)处绘制向量场图,其中(u,v)为速度分量。quiver(u,v)函数用来绘制向量场图。 【例329】绘制速度分量(u,v)的向量场图,其中u=sinx,v=cosx。 程序如下: clear; clc; close all; [X,Y] = meshgrid(-pi:pi/8:pi,-pi:pi/8:pi);% meshgrid创建x和y形成的二维网格 U = sin(Y); V = cos(X); quiver(X,Y,U,V,'r') title('向量场图'); 绘制的速度分量的向量场图如图336所示。 图336速度分量的向量场图 3.4.11彗星图 函数comet用来绘制彗星图,可产生质点动画。 调用格式: comet(x,y) 说明: 该函数绘制由向量x和y确定的路线的慧星图; comet(x,y,p)函数设置彗星体的长度为p×length(y),参数p的默认值为0.1。 【例330】绘制y=sinx在0到2π范围内的彗星图。 程序如下: %% 绘制彗星图,动态图 clear ;clc; close all; x = 0:pi/50:2*pi; y = sin(x); comet(x,y);% 画动态图 绘制的彗星图(动态)如图337所示。 图337彗星图(动态) 3.4.12伪彩图 pcolor函数可以绘制伪彩图。 调用格式: pcolor(X,Y,C) 说明: 采用参数X确定横坐标,参数Y确定纵坐标,绘制矩阵C的伪彩图。pcolor(C)为绘制矩阵C的伪彩图。 【例331】若横坐标X=[1 2 3; 1 2 3; 1 2 3],纵坐标Y=X',绘制矩阵C=[3 4 5; 1 2 5; 5 5 5]的伪彩图。 程序如下: X = [1 2 3; 1 2 3; 1 2 3]; Y = X'; C = [3 4 5; 1 2 5; 5 5 5]; pcolor(X,Y,C)%采用参数X确定横坐标,参数Y确定纵坐标,绘制伪彩图 title('矩阵C的伪彩图'); 绘制的由参数X确定横坐标,参数Y确定纵坐标,矩阵C的伪彩图如图338所示。 彩色图片 图338矩阵C的伪彩图 3.4.13图形对象句柄 一个图形由很多对象组成,包括图形对象(figure object)、线条对象(line object)和坐标轴对象(axes object),如图339所示。 图339图形对象示意图 图340中h=plot(x,y) 表示返回由图形线条对象组成的列向量。在创建特定的图形线条后,可以使用 h 修改其属性。 h可以是一个或多个图形线条对象,以标量或向量的形式返回。 图340h=plot(x,y)表示返回由图形线条对象组成的列向量 在MATLAB中,通过gca函数获得当前图形中坐标轴的句柄,常用函数如表36所示。 表36常用函数 函数用途 gca返回当前图窗中的当前坐标轴 gcf返回当前图窗的句柄 allchild查找指定对象的所有子级 ancestor图形对象的前代 delete删除对象 findall查找所有图形对象 利用get函数获取图形句柄的属性值。 调用格式: get(h,'属性') 该函数获取句柄为“属性”(PropertyName)的图形对象的属性值。 利用set函数设置图形句柄的属性值。 调用格式: set(h,'属性',属性值) 该函数将句柄为“属性”的图形对象的属性值设置为“属性值”(PropertyValue)。 通过坐标轴句柄,可以利用函数get获取坐标轴的属性值,也可以通过函数set对坐标轴的属性值进行设置。 【例332】获取例39的双纵轴坐标曲线的坐标轴句柄和两条线条的句柄,并对坐标轴和线条线型属性进行设置。 程序如下: %% 使用plotyy画两条曲线,修改曲线的属性 clear; clc; close all; 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);% 获取axes句柄和两条线条的句柄 set(get(AX(1),'Ylabel'),'String','左边 Y-轴');% 设置线段1的label set(get(AX(2),'Ylabel'),'String','右边 Y-轴');% 设置线段2的label title('双纵轴坐标曲线');% 显示标题 set(H1,'LineStyle','--');% 设置两条线的风格 set(H2,'LineStyle',':'); 获取例39的双纵轴坐标曲线的坐标轴句柄和两条线条的句柄如图341所示。 图341获取例39的双纵轴坐标曲线的坐标轴句柄和两条线条的句柄 本章小结◆ 本章重点介绍MATLAB二维图形的绘制方法,包括最基本而且应用最为广泛的绘制二维图形的函数plot、叠加图绘制、子图绘制等。此外,还介绍了其他二维图形绘制函数,包括火柴杆图、极坐标绘图、对数和半对数坐标系绘图、双纵轴坐标等。 【思政元素融入】 所谓一图胜千言,图形化的信息表示更加形象直观,使抽象数据的数量比较关系或变化趋势变得一目了然。掌握MATLAB最基本而且应用最广泛的二维绘图方法,可以将复杂的数据转变为直观的甚至动态可视化的图像,加深对事物本质的领悟和理解,通过抽象思维与形象思维的结合,提高学习的兴趣和积极性,有利于逻辑思维、辩证思维和创新思维能力的培养。