转载 Matlab绘图基本介绍 matlab绘图函数

原文地址:Matlab绘图基本介绍作者:li12242

这是本人毕业论文最后一张内容,有什么问题尽管提。

5.1Matlab画图基本介绍

Matlab是由美国Mathworks公司发布的计算环境。其主要特点是实现数据可视化以及交互式程序设计。Matlab有着强大的绘图功能,而且由于Matlab基本数据单位是矩阵,故其能够简单的实现高层次的作图,包括二维和三维的可视化、图象处理、动画和表达式作图。

Matlab图形系统使用的是面向对象的设计方法,其优越性在于可以重复的利用对象进行编程。面向对象方法是90年代软件开发方法的主流,其思想就是将所有的数据都被封装在类的实例中,而整个程序则被封装在一个更高级的类中。在使用既存部件的面向对象系统中,可以只花费少量时间和工作量来实现目标。在Matlab中,把许多有共同属性的图形对象抽象成为一个类,图形中每个对象都是类的一个实例,即对象,多个对象组合在一起,形成有意义的图形。不同的类有不同的依赖关系,按照一定关系组成图形对象的层次结构,如图5-1所示。

图5-1 Matlab图形对象的层次结构

第一层为根类,也成为root类对象,它表示计算机屏幕,是其他所有类的父类。根类保存一些系统状态信息和设置信息。

第二层为图形窗口类,也成figure类,他表示整个图形窗口,是根的直接子类。

第三层为坐标轴类和用户接口类,是figure类的直接子类。坐标轴类是核心类和组类的父类,用于数据的可视化;用户接口类(也成UI类)用于Matlab与用户之间交互操作。

第四层包括核心类和组类。核心类为所有绘图的基本元素;组对象为多个核心对象组合而成的坐标轴子对象。例如,图形的注释(annotation函数创建)、插图(legend函数创建)、直方图(bar函数创建)、火柴杆图(stem函数创建)等,都是组类。图形对象的创建函数与函数描述见表5-1

表5-1 图形的创建函数与函数描述

对象所属的类

创建函数

对象描述

root

计算机屏幕

图形窗口

figure

显示图形和用户界面的窗口

坐标轴

axes

在图形窗口中显示的坐标轴

内部控件

uicontrol

UI对象,执行用户接口交互相应函数的控件

图像

image

核心对象,基于像素点的二维图片

灯光

light

核心对象,影响块对象和曲面对象的光源

线条

[转载]Matlab绘图基本介绍 matlab绘图函数

line

核心对象,在指定坐标轴内绘制一条线

patch

核心对象,有边界的填充多边形

矩形

rectangle

核心对象,有曲率属性的、从椭圆到矩形变化的二维图形

曲面

surface

核心对象,将数据作为平面上点的高度创建的二维矩阵数据描述

文本

text

核心对象,用于显示字符串与特殊字符

组合对象

hggroup

坐标轴子对象,同时操作多个核心对象

每个具体对象都有一个"与生俱来、终生不变"的独特"身份",即句柄(Handle)。句柄是储存图形对象唯一规范识别符,不同对象的句柄不可能重复和混淆。

所有对象都有一组定义和刻画其外貌和性状的属性。属性由两部分组成:属性名和属性值,即属性二元对。在创建或修改属性的指令中,属性名和属性值总是成对出现。

属性名是英文词组字符串。该英文词组每个单词第一个字母大写,而单词间没有空格,例如'LineStyle','ColorMap'等。这样书写属性名的目的是便于阅读。至于在指令中援引属性名时,为用户输入方便,Matlab采取了两个措施:第一,不分字母大小写,都同样识别;第二,只要不引起歧义,属性名不必全写。比如'lines'就代表'LineStyle'。

不同的属性值将使对象具有不同的表现。

Matlab每个对象的属性都有十几种,但是创建对象时不必把所有属性全部加以定义。因为倘若用户不对某个属性加以定义,Matlab总会自动地给对象的每个属性赋予"出厂定义"的属性值。当然,用户如果希望创建具有个性的图形,那么就可以通过某些属性进行定义。浮泥绘制过程中,有关figure对象的颜色地图,某些曲面透明度等,这些都需要自己进行定义。

除根对象外,所有图形对象都由与之同名的指令创建。对象创建指令的名称和含义见表9.2.1。这些指令都是Matlab的内建函数。每个指令在创建对象的同时,还可返回该函数的句柄。

每个底层函数只能创建这11个图形对象中的一个,并将它们置于适当的父辈对象之中。

表5-2 建立图形对象命令、功能及调用格式举例

指令名

功能

调用格式举例

figure

创建图形窗

h = figure(n)n为整数,打开或创建第n号图形窗

axes

创建轴

h = axes(n) 定义坐标轴

line

创建线

h = line(x,y,z)绘制向量x、y、z确定的直线

rectangle

创建长方形

h =rectangle('position',[x,y,w,h],'curvature',[xc,yx])

x、y为左下角顶点坐标,w、h为长方形的宽和高;xc、yc曲率

patch

创建块

h = patch('face',fac,'vertices',vert)

vert为顶点矩阵,fac为定义多边形的顶点序号矩阵

image

创建图像

h = image(x) x为图像数据矩阵

text

创建字

h = text(x,y,'string')x、y指定字符串string标注位置

light

创建光照

h =light('Position',[1,0,0])

设置入射光的方向。它影响面、块对象的渲染

uicontrol

创建用户界面控制

h = uicontrol('property',value)property/value 指定界面的控制类型

uimenu

创建用户界面菜单

h = uimenu('property',value)property/value 指定图形窗口上方的菜单形式

5.3Matlab浮泥剖面图形绘制

5.3.1三维图形的数据准备

在matlab中,除根屏幕外,所有图形对象都由与之同名的指令创建。有关各种三维绘图的函数和其功能,主要有以下几种:

图5-3 绘制三维图像主要函数及其功能

三维绘图函数

函数主要功能

contour

二维等值线图

contour3

等值线图

fill3

填充的多边形

mesh

网格图

meshc

具有基本等值线图的网格图

meshz

有零平面的网格图

pcolor

二维伪彩色绘图

plot3

直线图

quiver

二维带方向箭头的速度图

surf

曲面图

surfc

具有基本等值线图的曲面图

surfl

带亮度的曲面图

waterfall

无交叉线的网格图

要使浮泥运动情况形象的表达出来,主要使用surf函数。其主要功能是根据x,y,z的三个二维矩阵在三维直角坐标系中绘制曲面。

调用函数的基本格式为:surf(x,y,z,v)

这里参量的维数同作图维数关系与二维作图时关系类似。因为是三维图作图,所以变量都是二维矩阵且x,y,z,v大小必须一致。

其中x,y,z三个变量为曲面坐标参量。v是该点对应颜色映像矩阵ColorMap中颜色的序号,有关ColorMap颜色的设置,在5.4节有详细的说明。

曲面绘制时候,整个曲面是由一个个面片拼接而成,而每个四边形面片是由四个三维空间坐标中的角点组成的,如图5-2所示。例如x,y,z全部为为16×16的矩阵时,曲面角点共有256个,每个点的坐标根据x,y,z矩阵中对应元素的值来决定,即x(i,j),y(i,j),z(i,j)分别为同一个点(i,j)的三个坐标分量。四个角点组成面片时,点取自矩阵中相邻的四个点,即矩阵中序号为(i,j),(i+1,j),(i,j+1),(i+1,j+1)四个点会组成一个面片,如图5-3所示。

图5-2 Matlab中surf函数绘制曲面中的角点和面片

(i-1,j-1)

(i-1,j)

(i-1,j+1)

(i-1,j+2)

(i,j-1)

(i,j)

(i,j+1)

(i,j+2)

(i+1,j-1)

(i+1,j)

(i+1,j+1)

(i+1,j+2)

(i+2,j-1)

(i+2,j)

(i+2,j+1)

(i+2,j+2)

图5-3 某个矩阵中四个角点组成一个面片

Matlab为方便绘制曲面专门提供了meshgrid函数,它可以把向量x和y自动扩充为二维矩阵。例如:[X,Y] =meshgrid(-2:1:2, 0:1:2) ,此命令作用的就是把行向量:

扩充为两个二维矩阵:

其中矩阵的行数由y向量的元素个数决定,列数由x向量的元素个数决定。这样,四个点相连接组成面片时,矩形中相邻的四个点在三维空间中的xoy平面投影也是相邻的。避免了由点连接成面片时候出现交叉重叠的情况。

5.3.2图形的透视、镂空

每个surf函数创建的曲面对象,都具有'FaceAlpha'的属性来控制曲面上每个面片的透明度。通过对曲面属性'FaceAlpha'的调整,可以让某个曲面对象具有透明效果。'FaceAlpha'属性值在0~1之间进行变化,分别代表完全透明和不透明效果。每个曲面对象创建时,该属性值默认取值为1,即不透明。通过set命令设置'FaceAlpha'在0~1之间时,就可以使得曲面具有半透明效果。

通过对曲面透明度的调整,我们可以模拟出类似水体一样的半透明效果的曲面,使得计算结果更加生动形象。下图就是用Matlab制作的波浪爬坡的某一时刻图像。代表水体自由表面的蓝色曲面'FaceAlpha'的属性值设置为0.9,表示地形的灰黑色曲面属性值采用默认值。可以看出,不同曲面的透明效果灵活的使用令画面变得生动多彩。

图5-4Matlab绘制波浪爬坡过程的某一时刻图像

图形的镂空效果主要通过图形输入x,y,z数据操作,Matlab中nan(NotANumber)代表某些位置缺失的数据。Matlab处理缺失的数据时就会跳过或者其他处理,这个也是Matlab优越于其他语言的表现之一。在绘图中,Matlab处理坐标值中包含nan数据的方法就是把曲面包含此角点的面片去除掉。如图5-5所示,若我们将16×16的二维矩阵x中(4,4)的元素设为nan,可见包含(4,4)的四个面片被全部抹去。

通过这种方法,我们可以设定各种形状边界的曲面,曲面在xoy平面的投影也不必为矩形。图5-4中圆锥露出水面的效果也是通过设定角点坐标值为nan的方法实现的。

图5-5Matlab绘制镂空曲面效果

5.4图形颜色绘制

5.4.1Matlab图像类型简介

Matlab的图像类型分四种,分别为灰度图、RBG图、二值图和索引图,不同图像类型存储时的数据格式是不同的。

灰度图像是一个数据矩阵Gray,Gray中的数据均代表了在一定范围内的图像灰度值。RGB图像即真彩图像,在Matlab中存储为m×n×3的三维数据矩阵。数组中的元素定义了图像中的每一个像素的红、绿、蓝颜色值。二值图与灰度图像相同,只需要一个数据矩阵,每个像素只取两个灰度值(0或1)。索引图包括一个索引数据矩阵index_Matrix和一个颜色映像矩阵ColorMap。其中ColorMap是一个包含三列、若干行的数据阵列,其中每个元素的值均为[0,1]之间的双精度浮点型数据。ColorMap矩阵 的每一行分别表示红色、绿色和蓝色的颜色值。在Matlab中,索引图像是从像素值到颜色映射表值的"直接映射"。像素颜色由数据矩阵index_Matrix作为索引指向矩阵ColorMap进行索引,例如,值1指向矩阵ColorMap中的第一行,值2指向第二行,以此类推。

5.4.2浮泥后处理颜色表示方法

Matlab中,每个figure都是使用索引图的方法来表示颜色,在surf命令中,第四个参量v就是储存每个点颜色的索引值的矩阵。在Matlab绘图颜色映射过程中,首先设置索引值的上限和下限。若用户缺省该设置,就把v矩阵中最大值和最小值自动设置为索引值的上限和下限。然后把索引值上限和ColorMap第一行RGB值表示的颜色对应,索引值下限和ColorMap最后一行表示的颜色对应。最后按照一定对应关系(线性或者非线性),给每个v的值确定其对应的颜色。

ColorMap中表示颜色

v值

图5-6 索引图颜色对应方法

根据浮泥的性质可知,浮泥与水和底床的密度有显著区别。因此,我们可以用密度物理量来作为颜色索引值。根据相关文献,连云港地区浮泥密度为1.03g/cm3至1.30g/cm3之间。因此,我们将索引值上线定为0.99,下限为1.35。介于0.99至1.03之间时,用渐深的蓝色表示海水密度变化,在1.03至1.30之间时,用渐深的土黄色表示浮泥密度变化,最后大于1.30时,用单一的深咖啡色表示底床。

表5-4 不同密度物体颜色对照表

对应密度值(kg/m3)

对应颜色RGB值

颜色

最小密度水体

0.99

[124,234,255]

最大密度水体

1.03

[0,136,144]

最小密度浮泥

1.03

[225,186,83]

最大密度浮泥

1.30

[224,155,0]

最小密度底床

1.30

[106,51,21]

最大密度底床

2.65

[106,51,21]

当确定索引值上下限之后,线性对应是确定各个索引值对应颜色最简单的方法。设置ColorMap为64行,那么计算第行对应的索引值公式为:。

这样,我们便知道每行颜色应该对应的是有多大密度的水体、浮泥或底床了。

下面计算ColorMap每行颜色RGB数值,根据索引值大小等于密度我们知道,前8行表示的是密度逐渐增大的海水颜色,选定密度较小海水颜色为水蓝色,RGB值为[124,234,255],密度较大的海水颜色为蓝绿色,RGB值为[0,136,144]。中间6个值用两个RGB数值对应项进行线性插值,这样,我们便得到ColorMap中所有海水颜色的RGB数值,下图显示了海水密度由浅变深时候颜色变化。

图5-7 海水密度由浅变深时候颜色变化

浮泥和底床在ColorMap颜色的RGB数值设置同理。

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/319715.html

更多阅读

MATLAB 各种 对数函数 用法以及实例 matlab 对数函数

MATLAB 各种 对数函数 用法以及实例——简介在MATLAB运算当中,我们常常需要求对数,在编写M文件的过程中,我们也需要表示对数,下面我就通过一些示例介绍一下如何在MATLAB中求对数。MATLAB 各种 对数函数 用法以及实例——工具/原料MATLA

matlab中如何定义函数 matlab输入函数表达式

matlab中如何定义函数——简介许多时候希望将特定的代码(算法)书写成函数的形式,提高代码的可封装性与重复性,简化代码设计,提高执行效率!下面简单介绍一下matlab中的函数定义与使用。matlab中如何定义函数——工具/原料matlab 7.0及以上

matlab函数_连通区域转载 matlab 连通区域分析

matlab函数_连通区域1、 matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。算法:(1)Determine the connected components. L = bwlabeln(BW, conn)

声明:《转载 Matlab绘图基本介绍 matlab绘图函数》为网友少年与猫分享!如侵犯到您的合法权益请联系我们删除