matlab绘图

前言

  • 在求线性规划题目时,可以将函数图像相交的点求出来,作为横坐标端点即先求后画.其它题目有时可以先求后解,算一个别样的技巧吧
  • 最好加一个close all;
  • 线图
  • 图形对象属性

绘图基础

  • 可以直接在图形窗口上修改图形
  • 如果当前不存在图形窗口,MATLAB 的绘图函数会自动 建立一个新的图形窗口;如果已存在一个图形窗口,MATLAB 的绘图函数就会在这个窗口 中进行绘图操作;如果已存在多个图形窗口,MATLAB 的绘图函数就会在当前窗口中进行 绘图操作(当前窗口通常是指后一个使用的图形窗口)。
  • matlab绘图是将图形每一个点标出后连接而成,因为横坐标间隔值不一定相同,所以2个图形相交y值不一定相等,找交点s=find(abs(y1-y2)<0.01))其中0.01设置具体看横坐标间隔值大小,否侧可能找不到
    • plot函数维度必须相同,因为图形是将点连接起来,所以x与y个数维度必须相同
    • plot函数可以标点画点(因为画图是画点再连接起来)
    • 注意s是横坐标x的下标,而且是向量(多个交点,多个下标)
  • 注意:
    • 如果已经存在一个图形窗口,plot命令则清除当前图形,绘制新图形
    • 可任意设定曲线颜色和线型
    • 可给图形加坐标网线和图形加注功能

例题

  • 解法一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clc,clear;
close all;
x1=[0:0.1:4];
y1 = sqrt(x1);
x2=[4:0.1:6]
y2 = 2*ones(1,21); %注意这里如果是直接写2,因为plot画图是多个点连接,y2只有一个值,所以要创建与x2横坐标相同维度的y2
x3 = [6:0.1:8];
y3 = 5-x3/2;
y4 = 1;
plot(x1,y1);
hold on
plot(x2,y2);
hold on
plot(x3,y3);
hold on
plot([8:0.1:10],y4);
  • 解法二:注意下方分段函数的表达
1
2
3
4
5
6
clc; clear all
x=0:0.01:10;
y=sqrt(x).*(x>=0&x<4)+2*(x>=4&x<6)+(5-x/2).*(x>=6&x<8)+1*(x>=8); %注意学习
plot(x,y,'r','linewidth',2)
axis([0 10 0 2.1])
grid on

命令行

  • 1.hold on: hold on retains plots in the current axes so that new plots added to the axes do not delete existing plots. New plots use the next colors and line styles based on the ColorOrder and LineStyleOrder properties of the axes. MATLAB® adjusts axes limits, tick marks, and tick labels to display the full range of data.

    • hold on保留当前坐标轴中的绘图,这样添加到坐标轴中的新绘图就不会删除现有的绘图。新绘图使用基于坐标轴的ColorOrder和LineStyleOrder属性的下一种颜色和线条样式。MATLAB®调整坐标轴限制、刻度标记和刻度标签,以显示全部数据范围。
    • 例题:
      1
      2
      3
      4
      5
      6
      x = linspace(-pi,pi);
      y1 = sin(x);
      y2 = cos(x);
      plot(x,y1)
      hold on
      plot(x,y2)
  • 2.close all;关闭所有图形窗口

图形标注

  • 有关图形标注函数的调用格式为
    • title(‘图形名称’)
    • xlabel(‘x轴说明’)
    • ylabel(‘y轴说明’)
    • text(x, y, ‘图形说明’) %在坐标位置(x,y)处添加文字“图形说明”
    • legend函数用于对绘制曲线所用线型、颜色或数据点标记作图例说明,放置在空白处,可以通过鼠标移动图例,将其拖放到其它位置。部分函数同样适用于三维图形,在三维图中z坐标轴说明用zlabel函数。
      • legend(‘图例1’, ‘图例2’, …)

gca

  • gca
  • 表示当前坐标区或图
  • ax = gca 返回当前图窗的当前坐标区或图,这通常是最后创建的图窗或用鼠标点击的最后一个图窗。图形函数(例如 title)的目标为当前坐标区或图。可以使用 ax 访问和修改该坐标区或图的属性。如果该坐标区或图不存在,gca 将创建笛卡尔坐标区。

Axes属性

函数

  • 将标题、坐标轴标记、网格线及文字注
    释加注到图形上,这些函数为:
1
2
3
4
5
6
7
8
title —— 给图形加标题
xlable —— 给x轴加标注
ylable —— 给y轴加标注
text —— 在图形指定位置加标注
gtext —— 将标注加到图形任意位置
grid on(off) —— 打开、关闭坐标网格线
legend —— 添加图例
axis —— 控制坐标轴的刻度
  • 还有xlim(ylim,zlim),line, set…

    例题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
clc;clear;
close all;
t=0:0.1:10;
y1=sin(t);
y2=cos(t);
plot(t,y1,'r',t,y2,'b--');
set(gca,'FontSize',10);
x=[1.7*pi;1.6*pi];
y=[-0.3;0.8];
s=['sin(t)';'cos(t)'];
text(x,y,s);
title('正弦和余弦曲线');
legend('正弦','余弦')
xlabel('时间t')
ylabel('正弦、余弦')
grid
axis square

plot函数

  • 若用一个plot函数画多个图时,横坐标维度必须一致
  • plot(x,y,’s’) —— 开关格式,开关量字符串s设定曲线颜色和绘图方式,如: plot(x1,y1,’y*’,x2,y2,’rO’,…)
    • S的标准设定值如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
字母        颜色          标点           线型
y 黄色 : 点线
m 粉红 ○ 圈线
c 亮蓝 × ×线
r 大红 + +字线
g 绿色 - 实线
b 蓝色 * 星形线
w 白色 -- 虚线
k 黑色 -. 点划线


v 下三角
^ 上三角
< 左三角
> 右三角
square 正方形
diamond 菱形
pentagram 五角星
hexagram 六角星

例题

1
2
3
4
5
6
7
8
t=0:pi/100:2*pi;
y=sin(t);
y1=sin(t+0.25);
y2=sin(t+0.5);
y3=cos(t);
y4=cos(t+0.25);
y5=cos(t+0.5);
plot(t,[y',y1',y2',y3',y4',y5'])

  • plot(X,Y,’S’)命令

    • X,Y为同维向量时,绘制以X,Y元素为横、纵坐标的曲线;
    • X是向量,Y是有一维与X等维的矩阵时,则绘制出多根不同色彩的曲线. 曲线数等于Y矩阵的另一维数,X被作为这些曲线的共同横坐标;
    • X是矩阵,Y是向量时,情况与上面的相同,只是曲线都以Y为共同纵坐标;
    • X,Y为同维矩阵时,则以X、Y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数.
  • plot(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,)命令

    • 在这个格式中,每一个“三元组”(X,Y,’S’)的结构和作用与plot(X,Y,’S’)相同. 不同的三元组之间没有约束关系.
  • plot(x,y)——x,y为长度相同的向量,存储x坐标和y坐标
    用于绘制二维平面上的直角坐标图,以x为横坐标,y为纵坐标的二维曲线。

多窗口绘图

  • figure(n) —— 创建窗口函数,n为窗口顺序号。
1
2
3
4
5
6
7
t=0:pi/100:2*pi;
y=sin(t);y1=sin(t+0.25);y2=sin(t+0.5);
plot(t,y) —— 自动出现第一个窗口
figure(2)
plot(t,y1) —— 在第二窗口绘图
figure(3)
plot(t,y2) ——在第三窗口绘图

符号函数(显函数、隐函数和参数方程)画图

  • ezplot

    • ezplot(‘f(x)’,[a,b])
    • 表示在a<x<b绘制显函数f=f(x)的函数图。
    • ezplot('f(x,y)',[xmin,xmax,ymin,ymax])
    • 表示在区间xmin<x<xmax和 ymin<y<ymax绘制隐函数f(x,y)=0的函数图。
    • ezplot(' x(t) ', ' y(t) ',[tmin,tmax])
    • 表示在区间tmin<t<tmax 绘制参数方程x=x(t),y=y(t)的函数图。
  • ezplot函数:ezplot函数可以绘制符号函数的简易二维图形,其使用格式如下:

    • 1)ezplot(f)命令,对于显式函数f=f(x),在默认的范围[-pi,pi]上绘制该函数f=f(x)的图形;对于隐函数f(x,y)=0,在默认的平面区域[-2*pi<x<2*pi, -2*pi<y<2*pi]上绘制该函数f(x,y)=0的图形。
    • 2) ezplot(x,y)命令,在默认的范围[0<t<2*pi]内绘制参数形式函数x=x(t)与y=y(t)的图形。
    • 3)ezplot(f,[a,b])命令,在指定的范围[a<x<b,a<y<b]内绘制表达式为f=f(x)的显式函数图形。
    • 4)ezplot(f,[xmin,xmax,ymin,ymax])命令,在平面矩形区域[xmin<x<xmax,ymin<y<ymax]上绘制隐函数f(x,y)=0的图形。
    • 5)ezplot(x,y,[tmin,tmax])命令,在指定的范围[tmin<t<tmax]内绘制参数形式的函数x=x(t)与y=y(t)的图形。
  • 画隐函数ezplot的调用格式:
    • ezplot(f)—这里f为包含单个符号变量x的符号表达式,在x轴的默认范围[-2pi 2pi]内绘制f(x)的函数图
    • ezplot(f,xmin,xmax) — 给定区间
    • ezplot(f,[xmin,xmax],figure(n)) — 指定绘图窗口绘图。

plot3函数

  • plot3
  • 三维绘图,plot3(X1,Y1,Z1,...)如果 X1、Y1、Z1 中的一个或多个是向量,则会绘制向量对矩阵各行或各列的图,具体取决于向量的长度是否等于矩阵的行数或列数。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    %Define t as a vector of values between 0 and 10π. Define st and ct as vectors of sine and cosine values. Then plot st, ct,and t
    t = 0:pi/50:10*pi;
    st = sin(t);
    ct = cos(t);
    plot3(st,ct,t)

    %Create matrix X containing three rows of x-coordinates. Create matrix Y containing three rows of y-coordinates.
    t = 0:pi/500:pi;
    X(1,:) = sin(t).*cos(10*t);
    X(2,:) = sin(t).*cos(12*t);
    X(3,:) = sin(t).*cos(20*t);

    Y(1,:) = sin(t).*sin(10*t);
    Y(2,:) = sin(t).*sin(12*t);
    Y(3,:) = sin(t).*sin(20*t);
    Z = cos(t);
    plot3(X,Y,Z)

坐标控制

  • axis的用法有:
    • axis([xmin xmax ymin ymax]) —— 用行向量中给出的值设定坐标轴的最大和最小值。
      • axis ([-2 2 0 5])
    • axis(equal) —— 纵横坐标轴采用等长刻度
    • axis on(off) —— 显示和关闭坐标轴的标记、标志
    • axis auto —— 将坐标轴设置返回自动缺省值
    • axis SQUARE设置当前图形为正方形(或立方体形),axis square刻度范围不一定一样,但是一定是方形的
    • axis equal将横轴纵轴的定标系数设成相同值,axis equal刻度是等长的,但也不一定是方形的。
      • 给坐标加网格线可以用grid命令来控制,grid on/off命令控制是否添加网格线,不带参数的grid命令在两种之间进行切换。
      • 还有函数xlim(ylim,zlim)函数可以设置坐标范围

legend

  • legend在坐标区上添加图例
  • 部分调用格式:

    • lgd = legend(___) 返回 Legend 对象。可使用 lgd 在创建图例后查询和设置图例属性。
    • legend(bkgd)(其中 bkgd 为 ‘boxoff’)删除图例背景和轮廓。bkgd 的默认值为 ‘boxon’,即显示图例背景和轮廓
    • legend(label1,...,labelN) 设置图例标签。以字符向量或字符串列表形式指定标签,例如 legend('Jan','Feb','Mar')
    • legend(target,___) 使用 target 指定的坐标区、极坐标区或图形,而不是使用当前坐标区或图形。指定 target 作为第一个输入参数
    • legend(subset,___) 仅在图例中包括 subset 中列出的数据序列的项。subset 以图形对象向量的形式指定。您可以在指定标签之前或不指定其他输入参数的情况下指定 subset
  • 创建一个包含两个子图的图窗,并返回两个 Axes 对象 ax1 和 ax2。在每个子图中对随机数据绘图。通过指定 ax1 作为 legend 的第一个输入参数,在上部子图中添加一个图例。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    y1 = rand(3);
    ax1 = subplot(2,1,1);
    plot(y1)

    y2 = rand(5);
    ax2 = subplot(2,1,2);
    plot(y2)

    legend(ax1,{'Line 1','Line 2','Line 3'})

  • 如果您不想将绘制的所有图形对象都包含在图例中,可以指定要包含的图形对象。
    绘制三个线条并返回创建的 Line 对象。创建只包含其中两条线的图例。将第一个输入参数指定为要包含的 Line 对象的向量。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    x = linspace(0,pi);
    y1 = cos(x);
    p1 = plot(x,y1);

    hold on
    y2 = cos(2*x);
    p2 = plot(x,y2);

    y3 = cos(3*x);
    p3 = plot(x,y3);
    hold off

    legend([p1 p3],{'First','Third'})

  • 绘制两个线条并创建一个图例。然后为图例添加标题。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x = linspace(0,pi);
    y1 = cos(x);
    plot(x,y1)

    hold on
    y2 = cos(2*x);
    plot(x,y2)
    hold off

    lgd = legend('cos(x)','cos(2x)');
    title(lgd,'My Legend Title')

  • 绘制两个线条并在坐标区左下角创建一个图例。然后,删除图例的背景和轮廓。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x = linspace(0,pi);
    y1 = cos(x);
    plot(x,y1)

    hold on
    y2 = cos(2*x);
    plot(x,y2)
    hold off

    legend({'cos(x)','cos(2x)'},'Location','southwest')
    legend('boxoff')

xlabel

  • xlabel为 x 轴添加标签
  • 调用格式:

    • xlabel(txt) 将为 gca 命令返回的当前坐标区或图的 x 轴添加标签。重新发出 xlabel 命令会将旧标签替换为新标签。
      示例
    • xlabel(target,txt) 将向 target 指定的坐标区或图形添加标签。
    • xlabel(___,Name,Value)
    • t = xlabel(___)返回用作 x 轴标签的文本对象。使用 t 可在创建标签后对其进行修改。
  • 使用字符向量元胞数组创建多行标签。

    1
    2
    plot((1:10).^2)
    xlabel({'Population','(in thousands)'})

  • 在 x 轴标签中包括变量值
    • 添加带有文本和变量值的标签。使用 num2str 函数在标签中包含变量值。
      1
      2
      3
      plot((1:10).^2)  
      year = 2014;
      xlabel(['Population for Year ',num2str(year)])

  • 在轴标签中包括上标和下标,更改 x 轴标签字体大小和颜色

    • 文档里面
  • 为特定子绘图的 x 轴添加标签

    • 创建带有两个子图的图窗。为顶部子绘图的 x 轴添加标签。
      1
      2
      3
      4
      5
      6
      ax1 = subplot(2,1,1);
      plot((1:10).^2)
      xlabel(ax1,'Population')

      ax2 = subplot(2,1,2);
      plot((1:10).^3)

text

  • text 向数据点添加文本说明
  • 调用格式:
    • text(x,y,txt) 使用由 txt 指定的文本,向当前坐标区中的一个或多个数据点添加文本说明。若要将文本添加到一个点,请将 x 和 y 指定为以数据单位表示的标量。若要将文本添加到多个点,请将 x 和 y 指定为长度相同的向量。
    • text(x,y,z,txt) 在三维坐标中定位文本。
    • text(ax,___)在由 ax 指定的坐标区中,而不是在当前坐标区 (gca) 中创建文本。选项 ax 可以位于前面的语法中的任何输入参数组合之前。
    • t = text(___) 返回一个或多个文本对象。使用 t 修改所创建的文本对象的属性。有关属性和说明的列表,请参阅 Text 属性。可以使用上述任意语法指定一个输出。
  • 向多个数据点添加文本
    • 绘制一个线条。将相同的文本添加到沿该线条的两个点。
      1
      2
      3
      4
      5
      6
      7
      8
      x = linspace(-5,5);
      y = x.^3-12*x;
      plot(x,y)

      xt = [-2 2];
      yt = [16 -16];
      str = 'dy/dx = 0';
      text(xt,yt,str)

  • 通过将 str 指定为元胞数组,向每个点添加不同文本。
    1
    2
    3
    4
    5
    6
    7
    8
    x = linspace(-5,5);
    y = x.^3-12*x;
    plot(x,y)

    xt = [-2 2];
    yt = [16 -16];
    str = {'local max','local min'};
    text(xt,yt,str)

  • 显示多行文本
    • 创建一个线图,并向坐标区添加一个文本说明。通过将 str 指定为元胞数组显示多行文本。
      1
      2
      3
      plot(1:10)
      str = {'A simple plot','from 1 to 10'};
      text(2,7,str)

  • 创建一个线图,并向坐标区添加两个文本说明。在向坐标区添加多个文本说明时,通过指定嵌套元胞数组显示多行文本。
    1
    2
    3
    plot(1:10)
    str = {{'A simple plot','from 1 to 10'},'y = x'};
    text([2 8],[7 7],str)

------ The Happy Ending ------