Matlab绘图基础

 

平台:Win7 64 bit,Matlab R2014a(8.3)

 

  Matlab绘图功能强大,本文为“图解Matlab绘图”的形式介绍Matlab绘图的常用元素。

 

1.因图识图

  在Matlab中初砌一个矩阵,在左工作区窗口被当选这个变量,点击菜单“绘图”,即可以查看Matlab的各种图片:

图片 1

点击“来得更多”小箭头:

图片 2

点击左下比赛“目录”按钮:

图片 3

从今此处可以看来有着Matlab的图片。另外,从Matlab R2014a帮助文档的“Types of
MATLAB
Plots”(搜索即可)中为足以看Matlab支持的具备图形。我之其它一样首博文也总结了Matlab的持有绘图函数——Matlab绘图函数一览。

  这里想说之是,数据可视化的目的自然就是是于丁爱掌握数据,学习Matlab绘图为是这样,应该坐平等栽直观的、图形的、易于理解的章程进行(本文努力做到这点)。其实,如果只有是若因此Matlab绘图,并非假设系掌握Matlab绘图相关语法,只需要了解各个绘图函数的输入数据格式,其他的比方因为标轴控制、注解、颜色图等都得以透过当窗口被展开图形界面上的操作进行,毕竟,没有必要把工夫浪费在记忆大量底语法上。

 

2.输入数据格式

  Matlab面向数学处理,输入数据格式为是数学风格的,比如对平面及之点集(点数组),Matlab用少单一维数组来表示:x,y,这样第i只点的坐标就是(x(i),y(i))。这对于程序员来说可能有点不适于,因为面向对象程序设计思想要求封装性,也便是只要以一个接触之x,y坐标放在一起做Class“点”,然后用“点”这个路来声称数组。所以在用Matlab绘图功能时不过好尽量用数学之合计方法,而未是编程思维。

  要翻绘图函数的调用格式,请用“help xxx”指令,下面是一个例子:

图片 4

  于说具体数据格式之前,先要说一下“采样”和“插值”。这里说之Matlab绘图,很多是只要绘制连续函数的图像,计算机存储空间少,连续(无限)的定义域要叫“采样”或者说“离散化”之后才能够处理,而当绘制时,为了显得连续的底曲线还是曲面,而非是只有绘制一层层接触,需要开展“插值”,最广的插值就是线性插值。其实,“采样”和“插值”的定义在电脑是中产生普遍的有。

  下面坐极其广的几乎单绘图函数为条例,介绍Matlab绘图函数的输入数据格式

Function

Syntax

描述

plot

plot(X,Y)

plot(X,Y,LineSpec)

plot(X1,Y1,…,Xn,Yn)

plot(X1,Y1,LineSpec1,…,Xn,Yn,LineSpecn)

plot(Y)

plot(Y,LineSpec)

plot(___,Name,Value)

plot(axes_handle,___)

h = plot(___)

若X,Y均为向量,则点(X(i),Y(i))作为第i个被绘制的点,根据格式控制的不同,相邻点间可能被插值(连一条直线段);

若X,Y为尺寸相同的矩阵,X(:,i),Y(:,i)被绘制为一条曲线,默认不同曲线将有不同颜色;

若X被省略,则相当于X=1:n,n为点数。

bar

bar(Y)

bar(x,Y)

bar(___,width)

bar(___,style)

bar(___,bar_color)

bar(___,Name,Value)

bar(axes_handle,___)

h = bar(___)

在x(i)处绘制一组(grouped)或一条堆叠(stacked)的条形,条形高度由Y(i,:)指定;

若x被省略,则相当于x=1:n,n为Y的行数。

scatter

scatter(X,Y)

scatter(X,Y,S)

scatter(X,Y,S,C)

scatter(___,’fill’)

scatter(___,markertype)

scatter(___,Name,Value)

scatter(axes_handle,___)

h = scatter(___)

对每个点(X(i),Y(i)),绘制一个圆圈;

若S是向量,圆圈大小由S(i)指定,若S是标量,由S指定;

若C是向量,圆圈的颜色由C(i)对应的颜色组成,若C是矩阵,由C(i,1:3)指定RGB颜色值。

contour

contour(X,Y,Z)

contour(Z)

contour(…,n)

contour(…,v)

contour(…,LineSpec)

contour(axes_handle,…)

[C,h] = contour(…)

Z为MxN的二维数组,若X,Y也是MxN二维数组,则Z(i,j)=F(X(i,j),Y(i,j)),若X,Y是向量,则Z(i,j)=F(X(j),Y(i))(即把X,Y看做列向量),F为二维函数;

若X,Y被省略,则相当于X=1:N,Y=1:M;

标量n设定等值线条数;

单调递增向量v设定等值线的值。

 

surf

surf(X,Y,Z)

surf(Z)

surf(…,C)

surf(…,’PropertyName’,PropertyValue)

surf(axes_handles,…)

h = surf(…)

Z为MxN的二维数组,若X,Y也是MxN二维数组,则Z(i,j)=F(X(i,j),Y(i,j)),若X,Y是向量,则Z(i,j)=F(X(j),Y(i))(即把X,Y看做列向量),F为二维函数;

若X,Y被省略,则相当于X=1:N,Y=1:M;

C(i,j)的值对应到曲面上i,j点的颜色。

mesh

mesh(X,Y,Z)

mesh(Z)

mesh(…,C)

mesh(…,’PropertyName’,PropertyValue,…)

mesh(axes_handles,…)

h = mesh(…)

X,Y,Z,C的含义同surf。

注:对于向量x,y,可以用“[X,Y]=meshgrid(x,y)”构造二维数组X,Y,使得mesh(x,y,Z)和mesh(X,Y,Z)等价,也即有MxN个采样点,(X(i,j),Y(i,j))是索引为i,j的格点的x,y坐标。

slice

slice(V,sx,sy,sz)

slice(X,Y,Z,V,sx,sy,sz)

slice(V,XI,YI,ZI)

slice(X,Y,Z,V,XI,YI,ZI)

slice(…,’method’)

slice(axes_handle,…)

h = slice(…)

V为MxNxP的三维数组,若X,Y也是MxNxPs三维数组,则V(i,j,k)=F(X(i,j,k,Y(i,j,k),Z(i,j,k)),若X,Y,Z是向量,则V(i,j,k)=F(X(j),Y(i),Z(k)) ,F为三维函数;

若X,Y,Z被省略,则相当于X=1:N,Y=1:M,Z=1:P;

向量sx,sy,sz指定垂直于x,y,z轴的切片位置;

矩阵XI,YI,ZI定义更复杂的切片(可能不是平面)。

coneplot

coneplot(X,Y,Z,U,V,W,Cx,Cy,Cz)

coneplot(U,V,W,Cx,Cy,Cz)

coneplot(…,s)

coneplot(…,color)

coneplot(…,’quiver’)

coneplot(…,’method’)

coneplot(X,Y,Z,U,V,W,’nointerp’)

coneplot(axes_handle,…)

h = coneplot(…)

X,Y,Z,U,V,W都是MxNxP的三维数组,U(i,j,k)=Fu(X(i,j,k),Y(i,j,k),Z(i,j,k)),Fu为三维向量函数F的x分量,类似定义Fv,Fw;

若X,Y,Z被省略,则相当于[X,Y,Z]=meshgrid(1:N,1:M,1:P);

Cx,Cy,Cz定义圆锥起点的x,y,z坐标;

s定义缩放因子;

color指定圆锥颜色;

‘quiver’指定用箭头代替圆锥;

‘method’在Cx,Cy,Cz指定点上的插值方法。

 

3.格式控制及注解

  前面为说了,如果单纯是要是绘制,通过窗口操作这种“所显现即所得”的艺术不但可以长足变动美观的图片,而且节省大量时日,下面就是率先来瞧当Matlab的图窗口如何进展图片格式控制。下面是Matlab的图形窗口

Z=peaks;
surf(Z);

图片 5

达图被早就得以针对图纸进行缩放、平移、旋转、拾取数据、刷亮、图形链接、插入颜色栏、插入图例等功能,通过在菜单中选择还可以填补加光照、坐标轴标签等,点击上图备受之红箭头所因按钮后以著更多绘制工具栏

图片 6

可以视这曾经是一个老强大的编辑界面了,点击上图右下比赛按钮“双重多属性…”,将看到:

图片 7

这边可以开展更全面的控制,很爱猜到,这里的起与指令代码有十分好的对应。通过一番调整,且无写任何代码,我的希冀已成为如下样子(峰值数据是由此拾拿走工具得到的):

图片 8

  如果以为格式调整的好,还得将兼具的设置和调动“打包”成代码,在图片窗口被点击菜单“文件
>>
生成代码…”即生成一个M函数文件,以后调用这个函数对新数据开展绘图时,所有安装便自动应用及新数据及,也得查看转的代码来上学绘图相关语法。这种以“从图纸到代码”的方法和人情“从代码到图片”的法子对待效率必然会高出不少。

  Matlab绘图格式控制的详尽说明参考Matlab帮助文档“Matlab/Graphics/Formatting
and Annotation”,下面就针对最常用的通令展开介绍:

坐标系

指令

说明

axis on/off

打开/关闭坐标轴显示

Axis(V)

V=[x1,x2,y1,y2]或[x1,x2,y1,y2,z1,z2]

设定坐标范围

axis equal

x,y坐标采用等长刻度

axis vis3d

三维旋转观察时保持高宽比不变,避免图形大小变化

grid on/off

打开/关闭分格线

xlabel(S)/ylabel(S)/zlabel(S)

设定x/y/z轴标签为S

注解

指令

说明

title(S)

设定图的标题

legend(S1,S2,…)

加入图例

text(xt,yt,S)

在(xt,yt)处书写注释S

至于字符串显示的格式和换符号参考Matlab帮助文档“Text Properties”。

臃肿绘图

指令“hold on/off”控制是重叠绘制或挂已产生图片。

多子图

命令“subplot(m,n,p)”将绘图区分为mxn个区域,并指定为实践优先的第p独子区为当下绘制区,例如下(取自Matlab帮助文档):

x = linspace(0,10);
y1 = sin(x);
y2 = sin(2*x);
y3 = sin(4*x);
y4 = sin(8*x);

figure
subplot(2,2,1);
plot(x,y1);
title('Subplot 1: sin(x)')

subplot(2,2,2);
plot(x,y2);
title('Subplot 2: sin(2x)')

subplot(2,2,3)
plot(x,y3);
title('Subplot 3: sin(4x)')

subplot(2,2,4)
plot(x,y4);
title('Subplot 4: sin(8x)')

图片 9

Colormap, Shading, Light

  为了直观呈现数据,花哨的水彩是必不可少的,除了直接指定所绘制对象的颜色外,颜色可由标量数据映射到颜色表得到,从而可以利用颜色来显现第四维度的音讯。这里而涉及“采样”和“插值”,一个Colormap定义一个颜色表,这是采样后的简单个颜色值,待映射函数值f首先根据Cmax和Cmin算有一个1-N之数c,N是颜色表颜色值的个数,对c进行上下取整作为目录得到两个颜色值,再根据c和即时半单颜色值插值得到f映射的水彩,f映射的水彩就是一个格点的颜料,由四独格点围成的稍季边形的颜色由当时四单格点插值得到,shading和light指令就是之所以来支配映射的颜色值如何影响著颜色的。

  参考Matlab帮助文档“Matlab/Graphics/Formatting and Annotation”。

 

参考文献:

博客:Matlab绘图函数一览;

《MATLAB R2011a课程》(张志涌等,北京航空航天大学出版社,2011),第5节;

Matlab
R2014a帮忙文档,“MATLAB/Graphics”(在线版本)。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注