matlab绘图

时间:2024-02-15 14:23:26

强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分。

一.二维绘图

 一.绘制二维曲线的基本函数

1. plot函数的基本用法

plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。plot函数的应用格式

plot(x,y)     其中x,y为长度相同的向量,存储x坐标和y坐标。

例:在[0 , 2pi]区间,绘制曲线

程序如下:在命令窗口中输入以下命令  

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

或者可以自己建立m文件:

1 x=0:pi/100:2*pi;
2 y=2*exp(-0.5*x).*sin(2*pi*x);  %注意 exp以e为底的指数。
3 plot(x,y)

程序执行后,打开一个图形窗口,在其中绘制出如下曲线

  

例52 绘制曲线

这是以参数形式给出的曲线方程,只要给定参数向量,再分别求出x,y向量即可输出曲线:

1 >> t=-pi:pi/100:pi;
2 
3 >> x=t.*cos(3*t);
4 
5 >> y=t.*sin(t).*sin(t);
6 
7 >> plot(x,y)

程序执行后,打开一个图形窗口,在其中绘制出如下曲线

 

以上提到plot函数的自变量x,y为长度相同的向量,这是最常见、最基本的用法。实际应用中还有一些变化。

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

plot函数可以包含若干组向量对,每一组可以绘制出一条曲线。含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn)

如下列命令可以在同一坐标中画出3条曲线。

1 >> x=linspace(0,2*pi,100); %0到2*pi,一共一百步
2 
3 >> plot(x,sin(x),x,2*sin(x),x,3*sin(x))

 

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

 1 >> x=linspace(0,2*pi,100);
 2 
 3 >> y1=sin(x);
 4 
 5 >> y2=2*sin(x);
 6 
 7 >> y3=3*sin(x);
 8 
 9 >> x=[x;x;x]\';
10 
11 >> y=[y1;y2;y3]\';
12 
13 >> plot(x,y,x,cos(x))

x,y都是含有三列的矩阵,它们组成输入参数对,绘制三条曲线;x和cos(x)又组成一对,绘制一条余弦曲线。

利用plot函数可以直接将矩阵的数据绘制在图形窗体中,此时plot函数将矩阵的每一列数据作为一条曲线绘制在窗体中。如

>> A=pascal(5)

A =

     1     1     1     1     1

     1     2     3     4     5

     1      3     6    10    15

     1     4    10    20    35

     1     5    15    35    70

>> plot(A)

 

3. 含选项的plot函数

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

线型

颜色

标记符号

- 实线

b蓝色

.   点

s 方块

: 虚线

g绿色

o 圆圈

d 菱形

-. 点划线

r红色

× 叉号

∨朝下三角符号

-- 双划线

c青色

+ 加号

∧朝上三角符号

 

m品红

* 星号

<朝左三角符号

 

y黄色

 

>朝右三角符号

 

k黑色

 

p 五角星

 

w白色

 

h 六角星

 

例 用不同的线型和颜色在同一坐标内绘制曲线 及其包络线。

 1 >> x=(0:pi/100:2*pi)\';   %注意红点
 2 
 3 >> y1=2*exp(-0.5*x)*[1,-1];
 4 
 5 >> y2=2*exp(-0.5*x).*sin(2*pi*x);
 6 
 7 >> x1=(0:12)/2;
 8 
 9 >> y3=2*exp(-0.5*x1).*sin(2*pi*x1);
10 
11 >> plot(x,y1,\'k:\',x,y2,\'b--\',x1,y3,\'rp\'); 

在该plot函数中包含了3组绘图参数,第一组用黑色虚线画出两条包络线,第二组用蓝色双划线画出曲线y,第三组用红色五角星离散标出数据点。

4. 双纵坐标函数plotyy

在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不同量纲,不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的对比分析。使用格式为:plotyy(x1,y1,x2,y2)

x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左边的对应x1,y1数据对,右边的对应x2,y2。

二.绘制图形的辅助操作

绘制完图形以后,可能还需要对图形进行一些辅助操作,以使图形意义更加明确,可读性更强。

1. 图形标注

在绘制图形时,可以对图形加上一些说明,如图形的名称、坐标轴说明以及图形某一部分的含义等,这些操作称为添加图形标注。有关图形标注函数的调用格式为:

  • title(’图形名称’) (都放在单引号内)
  • xlabel(’x轴说明’)
  • ylabel(’y轴说明’)
  • text(x,y,’图形说明’)
  • legend(’图例1’,’图例2’,…) P190

其中,title、xlabel和ylabel函数分别用于说明图形和坐标轴的名称。text函数是在坐标点(x,y)处添加图形说明。(P88 或用gtext命令)。legend函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在空白处,用户还可以通过鼠标移动图例,将其放到所希望的位置。除legend函数外,其他函数同样适用于三维图形,在三维中z坐标轴说明用zlabel函数。

上述函数中的说明文字,除了使用标准的ASCII字符外,还可以使用LaTex(一种流行的数学排版软件)格式的控制字符,这样就可以在图形上添加希腊字符,数学符号和公式等内容。在Matlab支持的LaTex字符串中,用/bf , /it , /rm控制字符分别定义黑体、斜体和正体字符,受LaTex字符串控制部分要加大括号{}括起来。例如,text(0.3,0.5,’the usful {/bf MATLAB}’),将使MATLAB一词黑体显示。一些常用的LaTex字符见表,各个字符可以单独使用也可以和其他字符及命令配合使用。如text(0.3 ,0.5 ,’sin({/omega}t+{/beta})’)

将得到标注效果 。

标识符

符号

标识符

符号

标识符

符号

/alpha

 

/epsilon

 

/infty

 

/beta

 

/eta

 

/int

 

/gamma

 

/Gamma

 

/partial

 

/delta

 

/Delta

 

/leftarrow

 

/theta

 

/Theta

 

/rightarrow

 

/lambda

 

/Lambda

 

/downarrow

 

/xi

 

/Xi

 

/uparrow

 

/pi

 

/Pi

 

/div

 

/omega

 

/Omega

 

/times

 

/sigma

 

/Sigma

 

/pm

 

/phi

 

/Phi

 

/leq

 

/psi

 

/Psi

 

/geq

 

/rho

 

/tau

 

/neq

 

/mu

 

/zeta

 

/forall

 

/nu

 

/chi

 

/exists

 

2. 坐标控制

在绘制图形时,Matlab可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线能够尽可能清晰的显示出来。所以,一般情况下用户不必选择坐标轴的刻度范围。但是,如果用户对坐标不满意,可以利用axis函数对其重新设定。其调用格式为

axis([xmin xmax ymin ymax zmin zmax])

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

axis函数的功能丰富,其常用的用法有:

axis equal :纵横坐标轴采用等长刻度

axis square:产生正方形坐标系(默认为矩形)

axis auto:使用默认设置

axis off:取消坐标轴

axis on :显示坐标轴

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

给坐标加边框用box命令控制。和grid一样用法

3. 图形保持

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

4. 图形窗口分割

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

subplot(m,n,p)

该函数把当前窗口分成m×n个绘图区,m行,每行n个绘图区,区号按行优先编号。其中第p个区为当前活动区。每一个绘图区允许以不同的坐标系单独绘制图形。

三.绘制二维图形的其他函数

1. 其他形式的线性直角坐标图

在线性直角坐标中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别为:

  • bar(x,y,选项)      选项在单引号中
  • stairs(x,y,选项)
  • stem(x,y,选项)
  • fill(x1,y1,选项1,x2,y2,选项2,…)

前三个函数和plot的用法相似,只是没有多输入变量形式。fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点。

例5-8:分别以条形图、填充图、阶梯图和杆图形式绘制曲线

 1 x=0:0.35:7;
 2 
 3 y=2*exp(-0.5*x);
 4 
 5 subplot(2,2,1);bar(x,y,\'g\');
 6 
 7 title(\'bar(x,y,\'\'g\'\')\');axis([0, 7, 0 ,2]);
 8 
 9 subplot(2,2,2);fill(x,y,\'r\');
10 
11 title(\'fill(x,y,\'\'r\'\')\');axis([0, 7, 0 ,2]);
12 
13 subplot(2,2,3);stairs(x,y,\'b\');
14 
15 title(\'stairs(x,y,\'\'b\'\')\');axis([0, 7, 0 ,2]);
16 
17 subplot(2,2,4);stem(x,y,\'k\');
18 
19 title(\'stem(x,y,\'\'k\'\')\');axis([0, 7, 0 ,2]);

2. 极坐标图

polar函数用来绘制极坐标图,调用格式为:

polar(theta,rho,选项)

其中,theta为极坐标极角,rho为极径,选项的内容和plot函数相似。

例5-9:绘制 的极坐标图 

1 theta=0:0.01:2*pi;
2 
3 rho=sin(3*theta).*cos(5*theta);
4 
5 polar(theta,rho,\'r\');

3. 对数坐标图

在实际应用中,经常用到对数坐标,Matlab提供了绘制对数和半对数坐标曲线的函数,其调用格式为:

  • semilogx(x1,y1,选项1,x2,y2,选项2,…)
  • semilogy(x1,y1,选项1,x2,y2,选项2,…)
  • loglog(x1,y1,选项1,x2,y2,选项2,…)

这些函数中选项的定义和plot函数完全一样,所不同的是坐标轴的选取。semilogx函数使用半对数坐标,x轴为常用对数刻度,而y轴仍保持线性刻度。semilogy恰好和semilogx相反。loglog函数使用全对数坐标,x、y轴均采用对数刻度。

二. 三维绘图

一.绘制三维曲线的基本函数

最基本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用来绘制三维曲线。其调用格式为:

plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…)

其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。

例513 绘制空间曲线,该曲线对应的参数方程为

 1 t=0:pi/50:2*pi;
 2 
 3 x=8*cos(t);
 4 
 5 y=4*sqrt(2)*sin(t);
 6 
 7 z=-4*sqrt(2)*sin(t);
 8 
 9 plot3(x,y,z,\'p\');
10 
11 title(\'Line in 3-D Space\');
12 
13 text(0,0,0,\'origin\');
14 
15 xlabel(\'X\');ylabel(\'Y\');zlabel(\'Z\');grid;

 

二.三维曲面

1.平面网格坐标矩阵的生成

当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区域为D=[a,b]×[c,d],然后将[a,b]在x方向分成m份,将[c,d]在y方向分成n份,由各划分点做平行轴的直线,把区域D分成m×n个小矩形。生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。

产生平面区域内的网格坐标矩阵有两种方法:

利用矩阵运算生成。

1 x=a:dx:b;
2 
3 y=(c:dy:d)’;
4 
5 X=ones(size(y))*x;
6 
7 Y=y*ones(size(x));

经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。

利用meshgrid函数生成;

1 x=a:dx:b;
2 
3 y=c:dy:d;
4 
5 [X,Y]=meshgrid(x,y);

语句执行后,所得到的网格坐标矩阵和上法,相同,当x=y时,可以写成meshgrid(x)

2.绘制三维曲面的函数

Matlab提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用来绘制三维网格图,而surf用来绘制三维曲面图,各线条之间的补面用颜色填充。其调用格式为:

  • mesh(x,y,z,c)
  • surf(x,y,z,c)

一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。这样就可以得到层次分明的三维图形。当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。当x,y是向量时,要求x的长度必须等于z矩阵的列,y的长度必须等于必须等于z的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲线。

例:用三维曲面图表现函数 :

为了便于分析三维曲面的各种特征,下面画出3种不同形式的曲面。

 1 %program 1
 2 
 3 x=0:0.1:2*pi;
 4 
 5 [x,y]=meshgrid(x);
 6 
 7 z=sin(y).*cos(x);
 8 
 9 mesh(x,y,z);
10 
11 xlabel(\'x-axis\'),ylabel(\'y-axis\'),zlabel(\'z-axis\');
12 
13 title(\'mesh\'); pause;
14 
15 %program 2
16 
17 x=0:0.1:2*pi;
18 
19 [x,y]=meshgrid(x);
20 
21 z=sin(y).*cos(x);
22 
23 surf(x,y,z);
24 
25 xlabel(\'x-axis\'),ylabel(\'y-axis\'),zlabel(\'z-axis\');
26 
27 title(\'surf\'); pause;
28 
29 %program 3
30 
31 x=0:0.1:2*pi;
32 
33 [x,y]=meshgrid(x);
34 
35 z=sin(y).*cos(x);
36 
37 plot3(x,y,z);
38 
39 xlabel(\'x-axis\'),ylabel(\'y-axis\'),zlabel(\'z-axis\');
40 
41 title(\'plot3-1\');grid;

 

 程序执行结果分别如上图所示。从图中可以发现,网格图(mesh)中线条有颜色,线条间补面无颜色。曲面图(surf)的线条都是黑色的,线条间补面有颜色。进一步观察,曲面图补面颜色和网格图线条颜色都是沿z轴变化的。用plot3 绘制的三维曲面实际上由三维曲线组合而成。可以分析plot(x’,y’,z’)所绘制的曲面的特征。

例 绘制两个直径相等的圆管相交的图形。

 1 m=30;
 2 
 3 z=1.2*(0:m)/m;
 4 
 5 r=ones(size(z));
 6 
 7 theta=(0:m)/m*2*pi;
 8 
 9 x1=r\'*cos(theta);y1=r\'*sin(theta);%生成第一个圆管的坐标矩阵
10 
11 z1=z\'*ones(1,m+1);
12 
13 x=(-m:2:m)/m;
14 
15 x2=x\'*ones(1,m+1);y2=r\'*cos(theta);%生成第一个圆管的坐标矩阵
16 
17 z2=r\'*sin(theta);
18 
19 surf(x1,y1,z1);          %绘制竖立的圆管
20 
21 axis equal ,axis off
22 
23 hold on
24 
25 surf(x2,y2,z2);          %绘制平放的圆管
26 
27 axis equal ,axis off
28 
29 title (\'两个等直径圆管的交线\');
30 
31 hold off

 

 

例: 在xy平面内选择[-8, 8]×[-8, 8]绘制函数,

 1 [x,y]=meshgrid(-8:0.5:8);
 2 
 3 z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);
 4 
 5 subplot(2,2,1);
 6 
 7 meshc(x,y,z);
 8 
 9 title(\'meshc\');
10 
11 subplot(2,2,2);
12 
13 meshz(x,y,z);
14 
15 title(\'meshz\');
16 
17 subplot(2,2,3);
18 
19 surfc(x,y,z);
20 
21 title(\'surfc\');
22 
23 subplot(2,2,4);
24 
25 surfl(x,y,z);
26 
27 title(\'surfl\');
View Code

3.标准三维曲面

Matlab提供了一些函数用于绘制标准三维曲面,这些函数可以产生相应的绘图数据,常用于三维图形的演示。如,sphere函数和cylinder函数分别用于绘制三维球面和柱面。sphere函数的调用格式为:

[x,y,z]=sphere(n);

该函数将产生(n+1)×(n+1矩阵x,y,z 。采用这三个矩阵可以绘制出圆心位于原点、半径为1的单位球体。若在调用该函数时不带输出参数,则直接绘制所需球面。n决定了球面的圆滑程度,其默认值为20。若n值取的比较小,则绘制出多面体的表面图。

cylinder函数的调用格式为:

[x,y,z]=cylinder(R,n)

其中R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。如:cylinder(3)生成一个圆柱,cylinder([10,1])生成一个圆锥。而t=0:pi/100:4*pi; R=sin(t); cylinder(R,30);生成一个正弦圆柱面。 

例519 绘制标准三维曲面图形

 1 t=0:pi/20:2*pi;
 2 
 3 [x,y,z]=cylinder(2+sin(t),30);
 4 
 5 subplot(1,3,1);
 6 
 7 surf(x,y,z);
 8 
 9 subplot(1,3,2);
10 
11 [x,y,z]=sphere;
12 
13 surf(x,y,z);
14 
15 subplot(1,3,3);
16 
17 [x,y,z]=peaks(30);
18 
19 meshz(x,y,z);

 

3.其他三维图形。

在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,其函数分别为bar3,stem3,pie3和fill3。

bar3绘制三维条形图,常用格式为:

  • bar3(y);
  • bar3(x,y)

在第一种格式中,y的每个元素对应于一个条形。第二种格式在x指定的位置上绘制y中元素的条形图。

stem3函数绘制离散序列数据的三维杆图,常用格式为:

  • stem3(z)
  • stem3(x,y,z)

第一种格式将数据序列z表示为从xy平面向上延伸的杆图,x和y自动生成。第二种格式在x和y指定的位置上绘制数据序列z的杆图,x,y,z的维数要相同。

pie3函数绘制三维饼图,常用格式为:

pie3(x)    x为向量,用x中的数据绘制一个三维饼图。

fill3函数可在三维空间内绘制出填充过的多边形,常用格式为:

fill3(x,y,z,c)   用x,y,z做多边形的顶点,而c指定了填充的颜色。

例 绘制三维图形。

1绘制魔方阵的三维条形图2以三维杆图形式绘制曲线y=2sinx 3已知x =[2347,1827,2043,3025] ,绘制三维饼图     4用随机的顶点坐标值画出5个黄色三角形

 1 subplot(2,2,1);
 2 
 3 bar3(magic(4));
 4 
 5 subplot(2,2,2);
 6 
 7 y=2*sin(0:pi/10:2*pi);
 8 
 9 stem3(y);
10 
11 subplot(2,2,3);
12 
13 pie3([2347,1827,2043,3025]);
14 
15 subplot(2,2,4);
16 
17 fill3(rand(3,5),rand(3,5),rand(3,5),\'y\');

除了上面讨论的三维图形外,常用的图形还有瀑布图和三维曲面的等高线图。绘制瀑布图用waterfall函数,用法和meshz函数相似,只是它的网格线在x轴方向出现,具有瀑布效果。等高线图分二维和三维两种形式,分别使用函数contour和contour3绘制。

例 绘制多峰函数的瀑布图和等高线图。 

 1 subplot(1,2,1);
 2 
 3 [X,Y,Z]=peaks(30);
 4 
 5 waterfall(X,Y,Z);
 6 
 7 xlabel(\'XX\');ylabel(\'YY\');zlabel(\'ZZ\');
 8 
 9 subplot(1,2,2);
10 
11 contour3(X,Y,Z,12,\'k\');%其中12代表高度的等级数
12 
13 xlabel(\'XX\');ylabel(\'YY\');zlabel(\'ZZ\');

 

三.三维图形的精细处理

一.视点处理

在日常生活中,从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形的形状也是不一样的。视点位置可由方位角和仰角表示。

方位角,Matlab提供了设置视点的函数view,其调用格式为:

view(az,el)

其中az为方位角,el为仰角,它们均以度为单位。系统默认的视点定义为方位角为-37.5度,仰角30度。

例 从不同视点绘制多峰函数曲面。

 1  
 2 
 3 subplot(2,2,1);mesh(peaks);
 4 
 5 view(-37.5,30);
 6 
 7 title(\'1\');
 8 
 9 subplot(2,2,2);mesh(peaks);
10 
11 view(0,90);
12 
13 title(\'2\');
14 
15 subplot(2,2,3);mesh(peaks);
16 
17 view(90,0);
18 
19 title(\'3\');
20 
21 subplot(2,2,4);mesh(peaks);
22 
23 view(-7,-10);
24 
25 title(\'4\');

二.图形的裁剪处理

Matlab定义的NaN常数可以用于表示那些不可使用的数据,利用这些特性,可以将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的。例如,要削掉正弦波顶部或底部大于0.5的部分,可使用下面的程序。

1 x=0:pi/10:4*pi;
2 
3 y=sin(x);
4 
5 i=find(abs(y)>0.5);
6 
7 x(i)=NaN;
8 
9 plot(x,y);

例524 绘制两个球面,其中一个在另一个里面,将外面的球裁掉一部分,以便能看到里面的球。

 1 [x,y,z]=sphere(25);
 2 
 3 %生成外面的大球
 4 
 5 z1=z;
 6 
 7 z1(:,1:4)=NaN;%将大球裁去一部分
 8 
 9 c1=ones(size(z1));
10 
11 surf(3*x,3*y,3*z1,c1);       %生成里面的小球
12 
13 hold on
14 
15 z2=z;
16 
17 c2=2*ones(size(z2));
18 
19 c2(:,1:4)=3*ones(size(c2(:,1:4)));
20 
21 surf(1.5*x,1.5*y,1.5*z2,c2);
22 
23 colormap([0 1 0;0.5 0 0;1 0 0]);
24 
25 grid on
26 
27 hold off

 

色图中使用三种颜色,外面的球是绿色,里面的球采用深浅不同的两种红色。

四.隐函数作图

如果给定了函数的显式表达式,可以先设置自变量向量,然后根据表达式计算函数向量,从而用plot等函数绘制出图形。但是当函数采用隐函数形式时,如: ,则很难利用上述方法绘制图形。Matlab提供了一个ezplot函数绘制隐函数图形。用法如下:

①     对于函数f=f(x),ezplot的调用格式为:

  • ezplot(f),在默认区间(-2pi,2pi)绘制图形。
  • ezplot(f,[a,b]),在区间(a,b)绘制

②     对于隐函数f=f(x,y),ezplot的调用格式为;

  • ezplot(f),在默认区间(-2pi,2pi),(-2pi,2pi)绘制f(x,y)=0的图形。
  • ezplot(f,[xmin,xmax,ymin,ymax]);在区间          绘制图形。
  • ezplot(f,[a,b]),在区间(a,b),(a,b)绘制

③     对于参数方程x=x(t),y=y(t),ezplot函数的调用格式为:

  • ezplot(x,y),在默认区间 绘制x=x(t),y=y(t)图形。
  • ezplot(x,y,[tmin,tmax]),在区间(tmin,tmax)绘制x=x(t),y=y(t)图形。

例 隐函数绘图举例。 

 1 subplot(2,2,1);
 2 
 3 ezplot(\'x^2+y^2-9\');axis equal;
 4 
 5 subplot(2,2,2);
 6 
 7 ezplot(\'x^3+y^3-5*x*y+1/5\')
 8 
 9 subplot(2,2,3);
10 
11 ezplot(\'cos(tan(pi*x))\',[0,1]);
12 
13 subplot(2,2,4);
14 
15 ezplot(\'8*cos(t)\',\'4*sqrt(2)*sin(t)\',[0,2*pi]);

其他隐函数绘图还有,ezpolar,ezcontour,ezplot3,ezmesh,ezmeshc,ezsurf,ezsurfc。

常用三角函数总结:

  • sin(x)       正弦函数
  • cos(x)       余弦函数
  • tan(x)       正切函数
  • asin(x)      反正弦函数
  • acos(x)      反余弦函数
  • atan(x)      反正切函数
  • atan2(x,y)   四象限的反正切函数
  • sinh(x)      双曲正弦函数
  • cosh(x)      双曲余弦函数
  • tanh(x)      双曲正切函数
  • asinh(x)     反双曲正弦函数
  • acosh(x)     反双曲余弦函数
  • atanh(x)     反双曲正切函数

五、地图

matlab可以绘制地图,但还是推荐argcis(专业绘制),或者Tableau(导入地理数据,可直接生成地图坐标绘图)。

 1 %% 
 2 clear;clc;close all
 3 maps %查看当前可用的地图投影方式
 4 
 5 %%  导入数据,全球海岸线
 6 load coast
 7 
 8 %% 绘图
 9 axesm robinson
10 patchm(lat,long,\'g\');
11  %% 设置属性
12 setm(gca);%查看当前可以设置的所有图形坐标轴(map axes)的属性
13 setm(gca,\'Frame\',\'on\');%使框架可见
14 getm(gca,\'Frame\');%使用getm可以获取指定的图形坐标轴的属性
15 setm(gca,\'Grid\',\'on\');%打开网格
16 setm(gca,\'MLabelLocation\',60);%标上经度刻度标签,每隔60度
17 setm(gca,\'MeridianLabel\',\'on\');%设置经度刻度标签可见
18 setm(gca,\'PLabelLocation\',[-90:30:90])%标上经度刻度标签,[-90:30:90]
19 setm(gca,\'ParallelLabel\',\'on\');%设置经度刻度标签可见
20 setm(gca,\'MLabelParallel\',\'south\');%将经度刻度标签放在南方,即下部  
21 setm(gca,\'Origin\',[0,90,0]);%设置地图的中心位置和绕中心点和地心点的轴旋转角度[latitude longitude orientation]
22 setm(gca,\'PLabelMeridian\',90);%将纬度标签放置在经度为90度的地方

绘制的图像如下:

五、其他特殊图形

一.面积图

面积图在实际中可以表现不同部分对整体的影响,在MATLAB中,绘制面积图的命令是area,它的使用格式如下:

调用格式                                                   说明

area(x)                                                与plot(x)命令一样,但是将所得曲线下方的区域填充颜色

area(x,y)                                             其中y为向量,与plot(x,y)一样,但将所得曲线下方的区域填充颜色

area(x,A)                                            矩阵A的第一行对向量x绘图,然后依次是下一行与前面所有行值的和对向量x绘图,每个区域有各自的颜色

area(...,level)                                     将填色部分改为由连线图到y = level的水平线之间的部分

例:利用矩阵,绘制面积图。

1 >> close all
2 >> Y = [1 5 3; 3 2 7; 2 4 8; 2 6 1];
3 >> area(Y)
4 >> grid on
5 >> colormap summer
6 >> set(gca, \'layer\', \'top\')%把坐标轴显示到顶层
7 >> title(\'面积图\')

二、饼图

饼图用来显示向量或矩阵中各元素所占的比例,它可以用在一些统计数据可视化中。在二维情况下,创建饼图的命令是pie,三维情况下创建饼图的命令是pie3。二者的使用格式也非常相似,因此我们只介绍pie的使用格式

调用格式                                             说明

pie(X)                                           用X中的数据画一饼形图,X中的每一元素代表饼形图中的一部分,X中元素X(i)所代表的扇形大小通过X(i)/sum(X)

                                                      的大小来决定。 若sum(X) = 1,则sum(X) = 1,则X中元素就直接指定了所在部分的大小;若sum(X) < 1,则画出一不

                                                     完整的饼形图

pie(X, explode)                          从饼形图中分离出一部分。explode为一与X同维的矩阵。当所有元素为零时,饼图的各个部分将连在一起组成一个

                                                     圆,而其中存在非零元时,X中相对应的元素在饼图中对应的扇形将向外移出一些来加以突出

h = pie(...)                                    返回一patch与text的图形对象句柄向量h

 

例:某企业四个季度的盈利额分别为528万元、701万元、658万元和780万元,试用饼图给出各个季度所占盈利总额的比例。

1 >> X = [528 701 658 780];
2 >> subplot(1,2,1)
3 >> pie(X)
4 >> title(\'二维饼图\')
5 >> subplot(1,2,2)
6 >> explode = [0 0 0 1];
7 >> pie3(X, explode)
8 >> title(\'三维分离饼图\')

运行结果如下:

三、柱状图

柱状图是数据分析中用得较多的一种图形,例如在一些预测彩票结果的网站,把各期中奖数字记录下来,然后做成柱状图,可以让彩民清楚地了解到各个数字在中奖号码中出现 的几率。在MATLAB中,绘制柱状图的命令有两个,一个hist命令,用来绘制直角坐标下的柱状图;另一个是rose命令,用业绘制极坐标系下的柱状图。

hist的命令的使用格式如下:

调用格式                                                     说明 

n = hist(Y)                                              把向量Y中的数据分放到等距的10个柱状图中,且返回每一个柱状图中的元素个数,若Y为矩阵,则该命令

                                                                按列对Y进行处理

n = hist(Y,x)                                           参量x为向量,把Y中元素放到m(m = length(x))个由x中元素指定的位置为中心的柱状图中

n = hist(Y,n)                                          参量n为标量,用于指定柱状图的数目

[n,xout]  = hist(...)                                 返回向量n与包含频率计数与柱状图的位置向量xout,用户可以用命令bar(xout,n)画出条形直方图

hist(...)                                                   直接绘出柱状图

例:创建服从高斯分布的数据柱状图,再将这些数据分到范围指定的若干个相同的柱状图中。

 1 >> Y = randn(10000,1);
 2 >> subplot(1,2,1)
 3 >> hist(Y)
 4 >> title(\'高斯分布柱状图\')
 5 >> x = -4:0.1:4;
 6 >> subplot(1,2,2)
 7 >> hist(Y,x)
 8 >> h = findobj(gca, \'Type\', \'patch\');
 9 >> set(h,\'FaceColor\',\'r\')
10 >> title(\'指定范围的高斯分布柱状图\')

运行结果如下:

rose命令的使用格式与hist命令非常相似,具体如下:

调用格式                                                           说明 

rose(theta)                                             显示参数theta的数据在20个区间或更少的区间内的分布。向量theta中的角度单位为弧度,用于确定每一

                                                                 区间与原点的角度,每一区间长度反映出输入参量的元素落入该区间的个数

rose(theta,x)                                           用参量x指定每一区间内的元素与区间的位置,length(x)等于每一区间内元素的个数与每一区间位置角度

                                                                 的中间角度

rose(theta,n)                                          在区间[0,2π]内画出n个等距的小扇形,默认值为20

[tout,rout] = rose(...)                               返回向量tout与rout,可以用polar(tout,rout)画出图形,但此命令不画任何的图形

例:画出上例中的高斯分布数据的极坐标下的柱状图

1 >> theta = Y * pi;
2 >> rose(theta)
3 >> title(\'极坐标系下的柱状图\')

四.误差棒图

MATLAB中绘制误差棒图的命令为errorbar,它的使用格式如下:

调用格式                                                     说明

errorbar(Y,E)                                      画出向量Y,同时显示在向量Y的每一元素之上的误差棒,其中误差棒为E(i)在曲线y上面与下面的距离线段,

                                                             故误差棒的长度为2E(i)

errorbar(X,Y,E)                                   X、Y、E必须为同型参量。若同为向量,则画出曲线上点(X(i),Y(i))处长度为2E(i)的误差棒图;若同为矩阵,

                                                             则画出曲面上点(X(i,j),Y(i,j))处带长度为E(i,j)的误差棒图

errorbar(X,Y,L,U)                               X、Y、L、U必须为同型参量。若同为向量,则在点(X(i),Y(i))处画出向下长为L(i)、向上长为U(i)的误差棒图;

                                                             若同为矩阵,则在点(X(i,j),Y(i,j)),处画出向下长为L(i,j)、向上长为U(i,j)的误差棒图

errorbar(...,LineSpec)                       画出用LineSpec指定线型、标记符、颜色等的误差棒图

h = errorbar(...)                                   返回线图形对象的句柄向量h

绘出下表数据的误差棒图

观察值                 213 225          232     221            254            243           236           287          254          257

实际值                 210            220           234            235            250            241           240           285          250          260

1 >> close all
2 >> x = [213 225 232 221 254 243 236 287 254 257];
3 >> y = [210 220 234 235 250 241 240 285 250 260];
4 >> e = abs(x - y);
5 >> errorbar(y, e)
6 >> title(\'误差棒图

五、箭头图

它的箭头方向为向量方向,箭头的长短表示向量的大小。这种图的绘制命令是quiver与quiver3。前者绘制的是二维图形,后者绘制的是三维图形。它们的使用格式也十分相似,只是后者比前者多一个坐标参数,这里我们只介绍quiver的使用格式。

调用格式                                                                    说明

quiver(U,V)                                               其中U、V为m*n矩阵,绘出在范围为x = 1:n和y = 1:m的坐标系中由U和V定义的向量

quiver(X,Y,U,V)                                        若X为n维向量,Y为m维向量,U、V为m*n矩阵,则画出由X、Y确定的每一个点处由U和V定义的向量

quiver(...,scale)                                       自动对向量的长度进行处理,使之不会重叠,可以对scale进行取值,若scale=2,则向量长度伸长2倍,

                                                                   若scale = 0, 则如实画向量图

quiver(...,LineSpec)                                用LineSpec指定的线型、符号、颜色等画向量图

quiver(...,LineSpec,\'filled\')                     对用LineSpec指定的记号进行填充

h = quiver(...)                                            返回每个向量图的句柄

例:绘制马鞍面:上的法线方向向量。

 1 >> close all
 2 >> x = -4:0.25:4;
 3 >> y = x;
 4 >> [X,Y] = meshgrid(x,y);
 5 >> Z = -X.^4 + Y.^4 - X.^2 - Y.^2 + 2*X*Y;
 6 >> surf(X,Y,Z)
 7 >> hold on
 8 >> [U,V,W] = surfnorm(X,Y,Z);
 9 >> quiver3(X,Y,Z,U,V,W,0.05)
10 >> title(\'马鞍面的法向量图\')

参考链接

matlab 绘图-详细全面

matlab绘制世界地图的脚本

MATLAB中特殊图形的绘制