MATLAB程序设计与应用 5.1 二维图形

MATLAB程序设计与应用

5. 第5章 MATLAB绘图

强大的绘图功能是MATLAB的特点之一。MATLAB提供了一系列绘图函数,用户不需要过多考虑绘图细节,只需给出一些基本参数就能得到所而图形,赵一尖图双你问)图BA筋除此之外,MATLAB 还提供了直接对图形对象句柄进行操作的低层绘图探作。简云云图探作FN单明了、方便高效,是用户最常使用的绘图方法,而低层绘图操作控制和表现图形的能力更强,为用户更加自主地绘制图形创造了条件。事实上,MATLAB 的高层绘图函数都是利用低层绘图函数而建立起来的。

5.1 二维图形

二维图形是将平面坐标上的数据点连接起来的平面图形。可以采用不同的坐标系,除直角坐标系外,还可以采用对数坐标、极坐标。数据点可以用向量或矩阵形式给出,类型可以是实型或复型。二维曲形的绘制无疑是其他绘图操作的基础。

5.1.1 绘制二维曲线的基本函数

在MATLAB中,基本的绘图函数是plot函数,利用它可以绘制出不同的二维曲线。

  1. plot函数的基本用法

    plot 函数用于绘制xy平面上的线性坐标曲线图,因此需提供一组x坐标及其各点对应的y坐标,这样就可以绘制分别以x和y为横、纵坐标的二维曲线。plot函数的基本调用格式如下:

    plot(x , y)
    

    示例

    在这里插入图片描述

    >> x = 0 : pi / 100 : 2 * pi;
    >> y = 2 * exp(- 0.5 * x) .* sin(2 * pi * x);
    >> plot(x , y)
    

    在这里插入图片描述

    注意:求y时,指数函数和正弦函数之间要用点乘运算,而因2为标量,
    所以2与指数函数之间可以用乘法运算。这样,向量x和向量y所包含的元素个数相等,y(i)是x(i)点的函数值。

    示例——绘制曲线

    在这里插入图片描述

    >> t = -pi : pi / 100 : pi;
    >> x = t .* cos(3 * t);
    >> y = t .* sin(t) .* sin(t);
    >> plot(x , y);
    

    在这里插入图片描述

    实际情况的变化:

    • 当x是向量,y是矩阵时,x的长度与矩阵y的行数或列数必须相等。如果x的长度等于y的行数,则以x和y的每列为横、纵坐标绘制曲线,曲线的条数等于y的列数。如果x的长度等于y的列数,则以x和y的每行为横、纵坐标绘制曲线,曲线的条数等于y的行数。如果y是方阵,x的长度和矩阵y的行数或列数都相等,则以x和y的每列为横、纵坐标绘制曲线。

      >> x = linspace(0 , 2 * pi , 100);
      >> y = [sin(x) ; cos(x)];
      >> plot(x , y)
      

      在这里插入图片描述

    • 当x、y是同型矩阵时,则以x、y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。

      >> t = linspace(0 ,2 * pi , 100);
      >> x = [t ; t];
      >> clear
      >> t = linspace(0 ,2 * pi , 100);
      >> x = [t ; t]';
      >> y = [sin(t) ; cos(t)]';
      >> plot(x , y)
      

      在这里插入图片描述

    • plot 函数最简单的调用格式是只包含一个输入参数,即 plot(x)。在这种情况下,当x是实向量时,则以该向量元素的下标为横坐标,元素值为纵坐标画出一条曲线,这实际上是绘制折线图。当x是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线。

      >> t = 0 : 0.01 : 2 * pi;
      >> x = exp(i * t);
      >> plot(x)
      

      在这里插入图片描述

      注意:程序中的i是虚数单位,这样x是一个复数向量。为了保证这一点,i不能被赋其他的值。

      当x是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于x矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。

      >> t = 0 : 0.01 : 2 * pi;
      >> x = exp(i * t);
      >> y = [x ; 2 * x ; 3 * x]';
      >> plot(y)
      

      在这里插入图片描述

  2. 含多个输入参数的plot函数

    plot函数可以包含若干组向量对,每一向量对可以绘制出一条曲线。

    plot(x1 , y1 , x2 , y2 ,...,xn , yn)
    
    • 当输入参数都为向量时,x1和y1,x2和y2,…,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。

      >> x = linspace(0 , 2 * pi , 100);
      >> plot(x , sin(x) , x , 2 * sin(x) , x , 3 * sin(x))
      

      在这里插入图片描述

    • 当输入参数有矩阵形式时,配对的xy按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。

      >> x = linspace(0 , 2 * pi , 100);
      >> y1 = sin(x);
      >> y2 = 2 * sin(x);
      >> y3 = 3 * sin(x);
      >> x = [x ; x ; x]';
      >> y = [y1 ; y2 ; y3]';
      >> plot(x , y , x , cos(x))
      

      在这里插入图片描述

      x和y都是含有3列的矩阵,它们组成输入参数对,绘制出3根正弦曲线,x和cos(x)都是向量,它们组成输入参数对,绘制出一根余弦曲线。

  3. 含选项的plot函数

    MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。

    线型选项:

    选项线型选项线型
    -实线(默认值)-.点划线
    :虚线双划线

    颜色选项

    序号选项颜色序号选项颜色
    1b蓝色5m品红
    2g绿色6y黄色
    3r红色7k黑色
    4c青色8w白色

    标记符号选项

    选项标记符号选项标记符号
    .v朝下三角符号
    o圆圈^朝上三角符号
    x叉号<朝左三角符号
    +加号>朝右三角符号
    *星号p五角星符
    s方块符h六角星符
    d菱形符

    要设置曲线样式可以在 plot函数中加绘图选项,其调用格式如下:

    plot(x1,y1,选项1,x2,y2,选项2,..., xn, yn,选项n)
    

    示例

    在这里插入图片描述

    >> 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 , 'k:',x , y2 ,'b--',x1 , y3 , 'rp');
    

    在这里插入图片描述

  4. 双纵坐标函数plotyy

    在 MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy 函数,其调用格式如下:

    plotyy(x1 , y1 , x2 , y2)
    

    其中,x1,y1对应一条曲线,x2, y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于xl, y1 数据对,右纵坐标用于x2, y2数据对。
    双纵坐标图形能把函数值具有不同量纲、不同数量级的两个函数绘制在同一坐标中,有利于图形数据的对比分析。

    示例

    在这里插入图片描述

    >> x = 0 : pi / 100 : 2 * pi;
    >> y1 = exp(-0.5 * x) .* sin(2 * pi * x);
    >> y2 = sin(x);
    >> plotyy(x, y1 , x , y2);
    

    在这里插入图片描述

5.1.2 绘制图形的辅助操作

→ 使图形意义更加明确、可读性更强。

  1. 图形标注

    在绘制图形的同时,可以对图形加上一些说明,如图形名称、坐标轴说明以及图形某一部分的含义等,这些操作称为添加图形标注。

    title(图形名称)
    xlabel(x轴说明)
    ylabel(y轴说明)
    text(x , y , 图形说明)
    legend(图例1 , 图例2 ,...)
    

    title和xlabel、ylabel 函数分别用于说明图形和坐标轴的名称。text函数是在(x, y)坐标处添加图形说明。添加文本说明也可用gtext 命令,执行该命令时,十字坐标光标自动跟随鼠标移动,单击鼠标即可将文本放置在十字光标处。例如,使用gtext(cos(x))可放置字符串cos(x)。legend函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在图形空白处,用户还可以通过鼠标移动图例,将其放到所希望的位置。除legend函数外,其他函数同样适用于三维图形,z坐标轴说明用zlabel函数。
    LaTeX格式的控制字符:

    MATLAB可用的LaTeX字符集

    在这里插入图片描述

    在这里插入图片描述

    一个在线LaTeX编辑器

    https://latexlive.com/

    在这里插入图片描述

  2. 坐标控制

    利用axis函数对坐标系进行重新设定。

    axis([xmin , xmax , ymin , ymax , zmin , zmax])
    

    如果只给出前4个参数,则MATLAB按照给出的x、y轴的最小值和最大值选择坐标系范围,以便绘制出合适的二维曲线。如果给出了全部参数,则系统按照给出的3个坐标轴的最小值和最大值选择坐标系范围,以便绘制出合适的三维图形。

    axis函数常用用法:

    • axis equal:纵、横坐标轴采用等长刻度。
    • axis square:产生正方形坐标系(默认为矩形)。
    • axis auto:使用默认设置
    • axis off:取消坐标轴。
    • axis on:显示坐标轴。

    给坐标加网格线用 grid命令来控制。grid on/off 命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。

    给坐标加边框用box 命令来控制。box on/off 命令控制是加还是不加边框线,不带参数的box命令在两种状态之间进行切换。

    示例——分段函数曲线并添加图形标注:

    在这里插入图片描述

    x = linspace(0 , 10 , 100);
    y = [];
    
    for x0 = x
        if x0 >= 8
            y = [y , 1];
        elseif x0 >= 6
            y = [y , 5 - x0 / 2];
        elseif x0 >= 4
            y = [y , 2];
        elseif x0 >= 0
            y = [y , sqrt(x0)];
        end
    end
    plot(x , y)
    axis([0 , 10 , 0 , 2.5])
    title('分段函数曲线');
    xlabel('Variable X');
    ylabel('Variable Y');
    text(2 , 1.3 , 'y=x^{1/2}');
    text(4.5,1.9 , 'y=2');
    text(7.3,1.5,'y=5-x/2');
    text(8.5 , 0.9 , 'y=1');
    

    在这里插入图片描述

  3. 图形保持

    一般情况下,每执行一次绘图命令就刷新一次当前图形窗口,图形窗口原有图形将不复存在。若希望在已存在的图形上再继续添加新的图形,可使用图形保持命令hold. hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。

    示例——用图形保持功能在同一坐标系内绘制在这里插入图片描述

    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]);
    
    hold on;
    
    plot(x , y2 , 'k');
    
    legend('包路线','包路线','曲线y');
    
    hold off;
    
    grid
    

    在这里插入图片描述

  4. 图形窗口的分割

    在实际应用中,经常需要在一个图形窗口内绘制若干个独立的图形,这就需要对图形窗口进行分割。分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口中的不同图形称为子图。MATLAB 系统提供了subplot函数,用来将当前图形窗口分割成若干个绘图区。每个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot 函数激活某一区,该区为活动区,所发出的绘图命令都是作用于活动区域。subplot函数的调用格式如下:

    subplot(m , n , p)
    

    该函数将当前图形窗口分成mxn个绘图区,即m行,每行n个绘图区
    区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。

    示例——在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。

    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 x 2个区中的1号区
    plot(x , y);
    title('sin(x)');
    axis([0 , 2 * pi, -1, 1]);
    
    subplot(2 ,2 ,2);  % 选中2 x 2个区中的2号区
    plot(x , z);
    title('cos(x)');
    axis([0 , 2 * pi, -1, 1]);
    
    subplot(2 ,2 ,3);  % 选中2 x 2个区中的3号区
    plot(x , t);
    title('tangent(x)');
    axis([0 , 2 * pi, -40, 40]);
    
    subplot(2 ,2 ,4);  % 选中2 x 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 x 2 个区中的1号区
    plot(x , y -1);
    title('sin(x)-1');
    axis([0 ,2*pi , -2, 0]);
    
    subplot(2 , 1 , 2);     % 选择2 x 1 个区中的2号区
    plot(x , z -1);
    title('cos(x)-1');
    axis([0 ,2*pi , -2, 0]);
    
    
    subplot(4 , 4 , 3);     % 选择4 x 4 个区中的3号区
    plot(x , y);
    title('sin(x)');
    axis([0 ,2*pi , -1, 1]);
    
    subplot(4 , 4 , 4);     % 选择4 x 4 个区中的4号区
    plot(x , z);
    title('cos(x)');
    axis([0 ,2*pi , -1, 1]);
    
    subplot(4 , 4 , 7);     % 选择4 x 4 个区中的7号区
    plot(x , t);
    title('tangent(x)');
    axis([0 ,2*pi , -40, 40]);
    
    subplot(4 , 4 , 8);     % 选择4 x 4 个区中的8号区
    plot(x , ct);
    title('cotangent(x)');
    axis([0 ,2*pi , -40, 40]);
    

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ding Jiaxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值