4.1 二维曲线

plot函数

  • 基本用法plot(x,y) ,x和y分别代表横纵坐标,plot函数会将各个点连接起来,形成线,x和y一般为长度相等的向量。
  • 最简单的调用格式plot(x)
    • 当x为实向量时,则以该元素下表为横坐标,元素的值为纵坐标绘制曲线。
    • 当x为复向量时,则以实部虚部分别为横纵坐标绘制曲线。
  • plot(x,y)函数参数的变化形式
    • 当x为向量,y为矩阵:这时x的长度和y的列数(或行数)必须相等。这时候绘制多条曲线,分别是x为横坐标,取与x长度相等的那一个参数作为纵坐标,另一个参数为曲线的条数。如果y的行、列两个参数相等,那么用y的每一列作为纵坐标,曲线条数等于矩阵列数。
    • 当x和y为同型矩阵:这时以x,y对应列元素为横、纵坐标绘制曲线,曲线条数等于矩阵列数。
    • 含多个输入参数:形如 plot(x1,y1,x2,y2,···,xn,yn) ,那么就是以每一个向量对组成一个点,绘制曲线。
  • 含选项的plot函数,plot(x,y,选项)
    • 线型 :通过"-",":","-.","--" 等参数来实现实线,虚线,点画线,双画线。
    • 颜色 :通过 "r","g" 等实现曲线颜色的切换。当颜色选项省略,绘图自动循环使用。
    • 数据点标记 :通过 "*","o","s" 等来实现将数据点用星号,圆圈,方块标记。

fplot函数

可根据参数函数的变化特性自适应地设置采样间隔,当函数值变化缓慢,采样间隔大,当变化快的时候,采样间隔小。

  • 基本用法fplot(f,lims,选项) ,参数分别函数(一般采用函数句柄表示),lims为x轴的取值范围,采用二元向量 [xmin,xmax] 来表示,默认值为 [-5,5] 。选项参数与plot函数相同。

  • 双输入参数函数的用法fplot(funx,funy,tlims,选项) ,前两个分别为x,y的参数表示,通常以函数句柄的形式给出。tlims为前方函数参数 t 的取值范围,用二元向量 [tmin,tmax] 表示,默认的值为 [-5,5] ,选项参数与上述相同。

例程

  • 利用不同的线型和颜色在同一坐标内绘制曲线 $y=2e^{-0.5x}sin(2\pi x)$ 以及其包络线。(包络线:在几何学,某个曲线族的包络线Envelope),是跟该曲线族的每条线都有至少一点相切的一条曲线。)
x=(0:pi/50:2*pi)';
y1=2*exp(-0.5*x)*[1,-1]; %这里绘制的是上下两条包络线,是有两行的矩阵。
y2=2*exp(-0.5*x).*sin(2*pi*x); %这里绘制的是曲线本身
x1=0:0.5:6;
y3=2*exp(-0.5*x1).*sin(2*pi*x1); %这里标记的是正弦函数和x轴的交点。
plot(x, y1, 'k:', x, y2, 'b--', x1, y3, 'rp')

plot1.png

  • 利用fplot函数绘制 $y=sin{\frac{1}{x}}$ 在区间 $[0,0.2]$ 的图像。
fplot(@x sin(1./x),[0,0.2])

plot2.png



4.2 绘制图形的辅助操作

添加图形标注

  • title函数:用于给图形添加标题说明

    • 基本用法title('图形标题') ,如果是有多行,就用逗号分隔,大括号{}括起来。
    • LaTeX排版:可在在图形标题中使用LaTeX格式控制符,要用LaTeX时将其控制字符用大括号{}括起来。
    • 控制字体:用 "\bf" ,"\it""\rm" 分别控制字体加粗,斜体以及正体。
    • 设置title函数属性title(图形标题,属性名,属性值) 其中属性名和属性值对应成对出现。
      • Color属性:用于设置图形标题文本的颜色,缺省时为黑色。
      • FontSize属性 :用于设置标题文字字号,缺省时为11。
  • xlable和ylable函数:给x轴和y轴添加说明

    • 基本用法xlable(x轴说明)ylable(y轴说明) ,同样还有 zlable等。
  • text函数和gtext函数:给特定位置说明

    • 基本用法
      • text(x,y,说明),x、y参数用来指明说明的位置,后面的说明和title函数类似
      • gtext(说明) 这里没有坐标指定位置,通过鼠标的点击来指定位置。
  • legend函数:用于给图形添加图例

    • 基本用法legend(图例1,图例2,···) 其中图例顺序要与plot函数中参数顺序相对应,图例的说明方式与tiele函数标题说明类似

坐标控制

  • axis函数:用于设置坐标轴的范围

    • 基本用法axis([xmin,xmax,ymin,ymax,zmin,zmax]) ,分别代表了x,y,z轴范围。

    • 其他用法:通过在axis函数下面加语句来实现控制其他格式。

      • axis equal:横纵坐标刻度等长。
      • axis square:采用正方形坐标系(默认为矩形)。
      • axis auto:使用默认设置。
      • axis off/on:不显示/显示坐标轴。
  • 给坐标系加网格和边框

    • 添加网格:通过 grid on/off 控制显示和不显示网格线,而直接用 grid 用于切换两种形式,如果是带网格则切换为不带,反之亦然。如果不添加语句,则默认不带。
    • 添加边框:通过 box on/off 控制显示不显示边框,用法与 grid 类似,如果不添加语句,则默认带网格。

图形保持

一般情况下绘图命令每执行一次,图形界面就刷新一次,去掉原有图形,绘制新图形,如果要保留原有图形,可使用图形保持命令。通过hold on\off 来控制是否保留,通过 hold 切换保留和不保留两种选择。

图形窗口分割

  • 子图:同一图形窗口中的不同坐标系下的图形称为子图。
  • subplot函数subplot(m,n,p) 意思是将图形窗口分成 $m\times n$ 个子图区域,当前绘制的是第p个子图,区号按行编号。我们在一个图形窗口内,绘制不同的图可以采用不同的分割。

例程

  • 绘制 $sinx$ 、$sin2x$ 、$sin(\frac{x}{2})$ 的图像,并添加相应的图形标注。
x=linspace(0,6*pi,100);
y=[sin(x);sin(2*x);sin(x./2)];
plot(x,y);
axis([0,6*pi,-1.1,1.1]);
title('不同频率正弦函数曲线');
xlabel('X-axis');
ylabel('Y-axis');
text(2.5,sin(2.5),'sin(x)');
text(1.5,sin(3),'sin(2*x)');
text(5.5,sin(0.5*5.5),'sin(x/2)');
legend('sin(x)','sin(2x)','sin(x/2)');
grid on

plot3.png

  • 利用子图函数在不同区域绘出不同图形。
x=linspace(0,2*pi,100);
subplot(2,2,1);
plot(x,sin(x));
title('sin(x)');
axis([0,2*pi,-1,1]);
subplot(2,1,2);
plot(x,cos(x));
title('cos(x)');
axis([0,2*pi,-1,1]);
subplot(4,4,3);
plot(x,tan(x));
title('tan(x)');
subplot(4,4,8);
plot(x,cot(x));
title('cot(x)');
axis([0,2*pi,-35,35]);

plot4.png



4.3 其他形式的二维曲线

其他坐标系下的二维曲线图

  • 对数坐标图

    • semilogx 函数:调用形式与plot函数类似,semilogx(x,y,选项)为其中一种调用格式,其他的可参考plot函数,此函数绘图采用半对数坐标,x轴采用常用对数刻度,y轴为线性刻度。
    • semilogy 函数:调用形式与plot函数类似,semilogy(x,y,选项)为其中一种调用格式,其他的可参考plot函数,此函数绘图采用半对数坐标,y轴采用常用对数刻度,x轴为线性刻度。
    • loglog 函数:调用函数与上述类似,x和y都为常用对数刻度。
  • 极坐标图

    • 基本调用格式:polar(theta,rho,选项) theta为极角,rho 为极径,选项与plot函数类似。

统计图

  • 条形类图形

    • 条形图

      • bar 函数:绘制二维垂直条形图

        • 调用格式为bar(y,style) :y如果为向量,则以每个元素值作为每一个柱的高度,元素下标代表横坐标。如果y为矩阵,则以每一行作为一组,以行号作为组号绘图。后方的 style"grouped""stacked" 两种模式,分别为簇状分组和堆积分组。默认为簇状分组。
        • 调用格式为bar(x,y,style) :其中x存储横坐标,y为矩阵,存储每一个横坐标对应的数据,y的行数必须与x的长度相对应。
      • barh 函数:绘制二维水平条形图。调用格式与bar函数相同。

    • 直方图

      • hist 函数:绘制直角坐标系下的直方图。

        • 调用格式为 hist(y) ,y为向量,绘图时将 $[miny,maxy]$ 区间等分成十组,并求出每个区间内对应元素的个数,然后绘出直方图。
        • 调用格式为hist(y,x),如果x为标量,则将y区间分成x个区间,如果x为向量,则向量中的每一个数指定分组的中心值,元素的个数为指定分成的组数,x缺省默认均分十组。
      • rose 函数:用于绘制极坐标系下的直方图。

        • 调用格式为 rose(theta,x) 其中参数 theta 用于确定每一数据与圆点的角度,如果x为标量,则x代表均分组数,缺省默认为20。
  • 面积类图形

    • 扇形图/饼图
      • pie 函数:调用格式为 pie(x,explode) 其中参数x为待统计的数据,通常为向量,其中每一个数据在整体中占用的比例在扇形图中表示出来,后续的 explode 为每个x对应的分离参数,如果非0,则将其分离出来。explode 缺省则饼图为一个整体。
    • 面积图
      • area 函数:与plot函数类似,下方与坐标轴围成的区域进行填充。
  • 散点类图形

    • 散点图
      • scatter 函数:scatter(x,y,选项,'filled') ,其中x和y通常为同等大小向量,代表了一定数量的点。选项与plot函数类似,用于限制颜色,线型,以及数据点标记,如果采用数据点标记,则可以用 ‘filled’ 参数来填充数据点,如果缺省,则标记数据点为空心。
    • 阶梯图
      • stairs 函数:使用方法与上述 scatter 函数类似。
    • 杆图
      • stem 函数: 使用方法与上述 scatter 函数类似。
  • 矢量类图形

    • 箭头图

      • quiver 函数:常用此绘制磁力线,矢量。调用格式为quiver(x,y,u,v) , 其中 (x,y) 为矢量起点,(u,v) 为矢量终点,如果x,y省略,则均匀取若干个点作为起点。
    • 罗盘图

    • 羽毛图

例程

  • 某次考试成绩优秀,良好,中等,及格,不及格人数分别为:7、13,23,9,4,用扇形统计图作成绩统计。
score = [7,13,23,9,4];
tag = [0,0,0,0,1];
pie(score,tag);
legend("Excellent","Good","Middle","Qualified","Bad",'Location','eastoutside');
%上方legend中的location是用于指定图例出现位置的,如果不指定,会与统计图重合

不加location参数

pie.png

加入location参数

pie2.png



4.4 三维曲线

plot3函数:绘制三维曲线最常用的函数。

  • 基本用法plot3(x,y,z) 其中三个参数分别为坐标对,一般为等长向量,plot3函数用直线将所有点连起来。

  • 变化形式

    • plot(x,y,z) 当x,y,z为同型矩阵,则绘制多条曲线,曲线条数等于矩阵列数。

    • 当x,y,z中有向量也有矩阵的时候,向量的长度应与矩阵相符,如果是行向量,那么行向量的长度应与矩阵列数相同,如果是列向量,那么列向量的长度应与矩阵行数相同。

    • 也可以用多组向量对来绘制多组曲线,plot(x1,y1,z1,x2,y2,z2···,xn,yn,zn)

  • 含选项的plot3函数plot(x,y,z,选项) 选项与功能与plot函数类似。

fplot3函数



4.5 三维曲面

生成平面网格数据

  • meshgrid 函数:调用格式 [X,Y]=meshgrid(x,y) ,其中x,y为向量,X,Y为存储网格坐标系横纵坐标的矩阵。如果只填一个 x ,那么就相当于 x=y

绘制三维曲面的函数

  • mesh 函数 & surf 函数

    • 基本调用格式mesh(x,y,z,c) & surf(x,y,z,c),两者可以用来绘制三维曲面,其中x,y为网格坐标矩阵,z 是网格点上的高度矩阵,c 用于指定在不同高度下的曲面颜色。如果 c 缺省,则默认 c=z ,也就是说颜色正比于高度。

    • 其他调用格式mesh(z,c) & surf(z,c) 这样的话就用z矩阵的列,行坐标代表x,y的值,z的值代表高度,c的意义与上面相同。

    • 其他花里胡哨的

      • 带等高线的三维网格曲面函数 meshc 和 带底座的三维网格曲面函数meshz ,用法与 mesh 函数相同。前者带等高线,后者带底座(就是说下面是实体的)。
      • 带等高线的曲面函数 surfc 和具有光照效果的曲面函数 surfl

标准三维曲面

  • sphere 函数:生成三维球面对应坐标。格式[x,y,z]=sphere(n) ,这将产生x,y,z三个(n+1)阶的方阵,通过这三个方针结合绘制三维曲面的函数 (surf或者mesh),可以绘制出圆心在圆点,半径为一的单位球面。如果不加输出参数x,y,z,则直接绘制球面。n的值代表圆滑程度,默认为20.
  • cylinder 函数:生成三维柱面对应坐标。格式为 [x,y,z]=cylinder(R,n) R为一个向量,存放柱面各个等间隔高度上的半径,n表示圆柱圆周上的间隔点个数,默认为20。如果R为标量,则生成一个柱面。

fsurf和fmesh函数

用于绘制参数方程表示的函数,并且有两个变参。调用格式为 fsurf(funx,funy,funz,uvlims),其中前三个通常为函数句柄形式给出的函数,uvlims 表示前三个函数自变量取值范围,用四元向量组来进行描述,形如[umin,umax,vmin,vmax],默认值为[-5,5,-5,5]

例程

  • 绘制螺旋曲面。
funx = @(u,v) u.*sin(v);
funy = @(u,v) -u.*cos(v);
funz = @(u,v) v;
fsurf(funx,funy,funz,[-5 5 -5 -2])
hold on
fmesh(funx,funy,funz,[-5 5 -2 2])
hold off

luoxuan.png

  • 绘制函数$z=(x-1)^2+(y-2)^2-1$ 的曲面图,分别用带等高线的mesh函数,带底座的mesh函数,带等高线的surf函数,带光照效果的surf函数绘制。$x\in[0,2],y\in[1,3]$
[x,y]=meshgrid(0:0.1:2,1:0.1:3);
z=(x-1).^2+(y-2).^2-1;
subplot(2,2,1);
meshc(x,y,z);title('meshc(x,y,z)')
subplot(2,2,2);
meshz(x,y,z);title('meshz(x,y,z)')
subplot(2,2,3);
surfc(x,y,z);title('surfc(x,y,z)')
subplot(2,2,4);
surfl(x,y,z); title('surfl(x,y,z)')

mesh.png