编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN
数据的可视化是体现数值计算的有效方式,MATLAB有大量的二维、三维图形命令,有丰富的图形表现力。
一、 二维绘图:
1. 基本绘图函数:
MATLAB提供了数据线性绘图的函数:
函数 |
描述 |
函数 |
描述 |
plot |
在二维坐标系里绘制线性图形 |
loglog |
在对数坐标系里绘制图形 |
semilogx |
在x对数比例坐标系里绘制图形 |
semilogy |
在y对数比例坐标系里绘制图形 |
这4个函数的使用方法很相似使用function指代,描述使用方法:
⑴ function(Y)
如果Y为实数,绘制Y下标和Y值为坐标的连续折线;如果Y为复数,则绘制连接(real(Y), image(Y))的折线。
⑵ function(X1,Y1,...)和function(X1,Y1,LineSpec,...)
绘制以(x,y)为坐标连续的折线,x和y的行或列的长度相同,但当x和y都为数组时,x和y需要相同大小。如果[x,y]是闭合的数组,则可以绘制多边形,多边形的面积可由polyarea求得。参数LineSpec用来设定图形的线型、标记符号、颜色等。
⑶ function(...,'PropertyName',PropertyValue,...)
可以设置由绘图函数创建line图形对象的属性值。
⑷ h=function(...)
返回绘图对象lineseries句柄对象。
⑸ hline=function('v6',...)
返回line对象句柄而不是lineseries句柄向量,以与旧版本兼容。
⑹ 绘制多条图形的方法:
function(x1,y1,x2,y2,...)
function(x,y)或function(y) % y为数组
使用hold on控制指令,保留当前图形与坐标轴的属性,后面的绘图指令在当前坐标轴中增加图形,绘制完成后使用hold off指令。
⑺ fplot()
对于变化剧烈的情况下可以使用来绘制较精确的绘图
⑻ezplot()
函数绘图
2. 双轴绘图函数plotyy:
plotyy是绘制双y轴曲线函数,格式有:
⑴ plotyy(X1,Y1,X2,Y2)
分别以左Y轴、右Y轴和X轴画(X1,Y1)和(X2,Y2)的图形。
⑵ plotyy(X1,Y1,X2,Y2,'function')和plotyy(X1,Y1,X2,Y2,'function1','function2')
字符串'function'代表绘制图形的方式,可选择plot、semilogx、semilogy、loglog、stem等,或者是自定义的MATLAB可识别的函数。'function1'用于左坐标轴,'function2'用于右坐标轴。
⑶ [AX,H1,H2]=plotyy(.....)
AX返回两个坐标轴的句柄,AX(1)是左坐标轴句柄,AX(2)是右坐标轴句柄,而H1和H2分别为两个图形的句柄。
3. 窗口控制:
figure函数用来创建窗口图形对象,格式为:
⑴ figure
创建一个默认的参数新窗口对象
⑵ figure('PropertyName',PropertyValue, ...)
创建自定义参数的窗口对象
⑶ figure(h)
寻找句柄h的窗口是否存在,如果存在就显示出来;如果不存在且为整数就
⑷ h=figure(...)
创建句柄为h的新窗口
4. 窗口分隔:
subplot函数用来创建和控制多坐标轴。
⑴ subplot(m,n,p)或subplot(mnp)
把当前窗口分成mxn块矩形区域,并在第p区块创建一个新的坐标轴。不过subplot(111)表示清除坐标系后不会立即创建新的坐标系。
⑵ subplot(m,n,p,'replace')和subplot(m,n,p,'align')
'replace'表示当前坐标轴存在时,删除并创建一个新的坐标轴;'align'表示对齐方式。
⑶ subplot('Position',[left bottom width height])
在格式化的窗口对象(0.0到1.0)中创建一个位置为[left bottom width height]的坐标轴。
⑷ h=subplot(...)
返回创建新坐标轴的句柄。
5. 色彩、线型与数据点型:
绘图中,默认的颜色是蓝色的,其实其颜色、点型和线型都可以控制,这是通过属性设置来实现的。颜色属性有:
b |
g |
r |
c |
m |
y |
k |
w |
蓝色 |
绿色 |
红色 |
青色 |
品红 |
黄色 |
黑色 |
白色 |
点型属性有:
+ |
o |
* |
. |
x |
s |
d |
|||||
十字 |
空心圆 |
星号 |
实心圆 |
叉 |
正方形 |
菱形 |
|||||
^ |
v |
< |
> |
p |
h |
||||||
上三角 |
下三角 |
左三角 |
右三角 |
五星 |
六星 |
线型属性有:
- |
- - |
: |
-. |
实线 |
双划线 |
虚线 |
点划线 |
符号样式控制方式:
LineWidth |
MarkerEdgeColor |
MarkerFaceColor |
MarkerSize |
线宽 |
点型边颜色 |
点型填充色 |
点型大小 |
其中,MarkerEdgeColor用于空心圆、正方符、菱形符、五星符、六星符及4种三角符中。
使用上述属性的方法有两种:
⑴ LineSpec参数:
上述属性一般在绘制指令的LineSpec参数中使用,这是一个字符串,由线性符号、色彩符号、点型符号中各选取一个符号组成,没有先后顺序,当有符号未设时使用缺省设置。
缺省时的设置为:不同曲线会自动按表中颜色顺序着色,曲线只使用实线线型,只有当用户需要标志数据点时点型才起作用。
绘图指令中LineSpec参数:
plot(X1,Y1,LineSpec,...)
plot(...,'PropertyName',PropertyValue, ...)
示例:
plot(t,y3,'-.gp');
plot(x,y,'--rs','LineWidth',2,'MarkerEdgeColor','k', 'MarkerFaceColor','g','MarkerSize',10)
⑵使用set函数:
6. 坐标系修饰:
与坐标系相关的指令有grid、hold、box、axis等。
⑴ grid指令:控制网格线
grid on ---- 在当前坐标系中添加网格线
grid off ---- 删除当前坐标系中的网格线
grid minor ---- 在当前坐标系添加更密的网格线
grid ---- 切换网格线状态
grid(axes_handle, ...) ---- 对句柄axes_handle的坐标系进行网格线的控制
如:set(axes_handle, 'XGrid', 'on') %只打开x轴的网格线
⑵ hold指令:控制在当前图形中是重新绘制图形还是添加图形
hold on ---- 在当前坐标轴图形中添加绘制图形
hold off ---- 在重置坐标系,绘制新图形
hold all ---- hold控制绘图和线色与线型
hold ---- 切换hold on和hold off
hold(axes_handle, ...) ---- 对句柄为axes_handle的坐标系进行hold控制
⑶ box指令:控制坐标轴对象的边框
box on ---- 显示坐标轴边框
box off ---- 关闭坐标轴边框
box ---- 切换box on和box off
box(axes_handle, ...) ---- 对指定axes_handle对象控制
⑷ axis指令:坐标控制指令
axis([xmin xmax ymin ymax]) ---- 设置X、Y轴数值的范围
axis([xmin xmax ymin ymax zmin zmax cmin cmax]) ---- 设置X、Y、Z轴数值的范围
v=axis ---- 获取当前坐标系的数值范围向量
axis auto ---- 设置缺省值
axis manual ---- 设置当前数值范围不变
axis tight ---- 设置当前数值范围为当前数据范围
axis fill ---- 使得坐标充满整个绘图区
axis ij ---- 矩阵式坐标,原点位于左上方
axis xy ---- 直角坐标,原点位于左下方
axis equal ----等长刻度坐标轴
axis image ---- 等长刻度且数据框紧贴数据范围
axis square ---- 产生正方形/正方体坐标轴,x、y或z轴数值范围一样
axis vis3d ---- 三维防止图形大小变化
axis normal ---- 缺省坐标轴
axis off ---- 取消轴背景
axis on ---- 打开轴背景
axis(axes_handle, ...) ---- 对轴句柄控制操作
[mode,visibility,direction]=axis('state') ---- 返回当前坐标轴设置的参数
7. 图形标注:
MATLAB提供了一些指令可以在图形上加标注。
⑴ title指令:在坐标轴图形上端加标题
⑵ xlabel和ylabel指令及zlabel指令:分别在x轴、y轴、z轴加标注
这4个指令用法相同,用function表示具体调用格式:
function('string') ---- 标注字符串'string'
function(fname) ---- 标注执行函数返回的字符串
function(... , 'PropertyName', PropertyValue, ...) ---- 对标注的text对象设置属性
h=function(...) --- 返回标注句柄
⑶ gtext指令:用鼠标将文本放置在图形中
具体调用格式:
gtext('string') ---- 把字符串'string'标注在鼠标点下的位置
gtext({'string1', 'string2', 'string3', ...}) ---- 把字符串数组分行显示在鼠标一次点下的位置
gtext({'string1', 'string2', 'string3', ...}) ---- 把字符串数组顺序显示在鼠标多次点下的位置
h=gtext( ...) ---- 返回标注句柄
⑷ text指令:低级创建标注图形对象
text(x, y, 'string')或text(x, y, z, 'string') ---- 在指定坐标上标注
text(... , 'PropertyName', PropertyValue, ...) ---- 对标注的text对象设置属性值
h=text(...) ---- 返回标注句柄
⑸ clabel指令:在等高线图形中的高度标注
clabel(C)
clabel(C, h)
clabel(C, v)
clabel(C, h, v)
clabel(C, 'manual')
clabel(C, h, 'manual')
text_handles=clabel(...)
clabel(... , 'PropertyName',PropertyValue, ...)
clabel(... , 'LabelSpacing',points)
其中,C和h是等高线contour指令返回的参数,参数v表示只在给定向量v上给出标注,参数manual表示在鼠标选择的地方加上等高线标注,参数points表示在同一等高线上添加标注的间距。
⑹ legend指令:在当前图形加上图例
legend('string1', 'string2', ...) ---- 用指定字符串对所给数据的每一部分显示一个图例
legend(h, 'string1', 'string2', ...) ---- 对给定的图形句柄向量h添加图例
legend(string_matrix) ---- 用字符串数组添加图例
legend(h, string_matrix) ---- 指定的图形句柄向量h
legend(axes_handle, ...) ---- 指定的坐标系句柄axes_handle
legend('off')或legend(axes_handle, 'off') ---- 移除图例
legend('toggle')或legend(axes_handle, 'toggle') ---- 切换显示/隐藏图例
legend('hide')或legend(axes_handle, 'hide') ---- 隐藏图例
legend('show')或legend(axes_handle, 'show') ---- 显示图例
legend('boxoff')或legend(axes_handle, 'boxoff') ---- 移除图例边框
legend('boxon')或legend(axes_handle, 'boxon') ---- 显示图例边框
legend_handle=legend(...) ---- 返回图例句柄
legend ---- 刷新所有图例
legend(legend_handle, ...) ----刷新指定句柄图例
[legend_h, object_h, plot_h, text_strings]=legend(...) ---- 返回句柄
legend(li_object, string1, string2, string3) ----用字符串string1等创建图例对象
legend(li_object, M) ---- M表示字符串数组或元胞数组
legend(..., 'Orientation', orientation) ---- 图例的排列方式,可以为horizontal或vertical(缺省)
legend(... , 'Location', location) ----在指定位置location上放置图例,location是向量[left bottom width height]或位置字符串North、SouthEast等,或一些绝对数值(-1到4表示6个方向)
⑺ texlabel指令:产生用作标注的TeX字符串
texlabel(f) ---- 转换MATLAB表达式f为字符串
texlabel(f, 'literal') ---- 把希腊变量名作为文字输出
8. 图形缩放:
⑴ zoom指令:对二维图形进行放大或缩小,并会改变坐标轴范围
zoom on ---- 打开交互式的缩放功能,通过鼠标控制缩放
zoom off ----关闭交互式的缩放功能
zoom out ----返回图形至缩放初始化状态
zoom reset ---- 系统将记住当前图形的缩放状态,作为缩放状态初始值
zoom ----切换交互式缩放功能
zoom xon或zoom yon ---- 对x或y轴设置交互式缩放
zoom(factor) ---- 用缩放系数factor进行放大或缩小
zoom(fig, option) ---- 对fig应用缩放功能
⑵ pan指令:实现用鼠标抓取拖动图形的功能
pan on ---- 打开pan功能
pan off ---- 关闭pan功能
pan xon或pan yon ---- 只在x轴或y轴方向具有pan功能
pan ---- 切换pan on和pan off
pan(figure_handle, ...) ---- 指定figure句柄对象pan状态
⑶ linkaxes指令:实现一个粗体中不同坐标轴间的同步控制功能
linkaxes ---- 在当前figure上关联所有的坐标轴
linkaxes(axes_handles) ---- 关联指定的坐标轴
linkaxes(axes_handles, 'options') ---- 'options'值有x、y、xy、off四种,分别表示只关联x轴、只关联y轴、关联x和y轴、移除关联。
二、三维绘图:
MATLAB也提供了强大的三维图形表现力。三维曲线可以使用plot3来绘制,其中需要3个向量或矩阵参数,线型和颜色可以使用LineSpec字符串确定。
1. 三维数据的产生:
数学上,函数z=f(x, y)的图形可以表现为三维空间曲面,MATLAB中将曲面定义的矩形区域分成mxn个小矩形块,根据函数计算出网格点的数值,得到空间网格曲面。
⑴ peaks指令:
用来产生一个凹凸有致的曲面,包括3个局部极大点及3个局部极小点,返回的是49x49数组。
⑵ meshgrid指令:
将指定的两个矢量x或y转换成两个矩阵X和Y,其中矩阵X的所有行全相同,都为x矢量的复制;而Y矩阵的列相同,为矢量y的复制。
⑶griddata指令:
在定义的区域内将不规则的数据规则化成网格数据,转换方法采用曲面拟合。
2. 三维绘图指令:
三维基本绘图指令包括几类:
类别 |
指令 |
说明 |
网状图 |
mesh、ezmesh |
立体网状图 |
meshc、ezmeshc |
网状图上加等高线 |
|
meshz |
网状图上加围裙 |
|
曲面图 |
surf、ezsurf |
立体曲面图 |
surfc、ezfurfc |
曲面图上加等高线 |
|
surfl |
曲面图上加光源 |
|
曲线图 |
plot3、ezplot3 |
立体曲线图 |
底层函数 |
surface |
Surf用到的底层指令 |
line3 |
Plot3用到的底层指令 |
|
等高线 |
contour3 |
立体等高线 |
水流效果 |
waterfall |
在x方向或y方向产生水流效果 |
影像表示 |
pcolor |
在二维平面中以颜色表示曲面的高度 |
这些函数的通用格式为:function(X, Y, Z, C)和function(X, Y, Z),以(X, Y, Z)作为x、y、z轴的自变量绘制三维曲面或网状图,参数C指定三维图形的色图,缺省时C=Z。
三、特殊图形的绘制:
MATLAB提供了一些特殊的绘图函数,简单、功能强、容易使用。
1. 面域图、直方图、饼图:
直方图和面域图主要用于一定时域内比较不同数据集的结果,并且显示这些数据的总和,其中直方图用于离散数据显示,面域图显示连续数据的情况。饼图用来显示数据元素在总体中所占的百分比情况。排列图是向量按递减顺序排列的直方图,并且反映出递减数据百分比的变换情况。相关函数分为二维和三维,其中二维函数为:
面域图 |
二维垂直直方图 |
二维水平直方图 |
排列图 |
二维饼图 |
area |
bar |
barh |
pareto |
pie |
三维函数为:
三维垂直直方图 |
三维水平直方图 |
三维饼图 |
bar3 |
bar3h |
pie3 |
⑴ 面域图有几种格式:
对二维数组:
Y=[1, 5, 3;
3, 2, 7;
1, 5, 3;
2, 6, 1];
area(Y) ---- 按第1列画出第1条曲线,曲线2是前两列数组相加,曲线3是3列数组相加
area(X, Y) ----
area(..., basevalue) ---- basevalue表示曲线与y=basevalue(默认0)间填充,如area(X, -1)
⑵ 直方图bar和barh格式类似:
bar(Y)
bar(x, Y)
bar(... ,width) ---- 设定条形的宽度,默认0.8。当宽度大于1时条形图之间会交叠
bar(... ,'style') ---- style对应grouped(默认)和stacked两种风格,分别为排列型和堆型
bar(... ,'bar_color') ---- 指定所有条形图的颜色,值有r、g、b、c、m、y、k、w。
⑶ 三维直方图bar3和bar3h的格式:
三维直方图与二维直方图函数格式类似,但参数style还有detacked风格,此时对应方向轴上的各个条形块是相互分离开的。
⑷ 饼图的格式:
pie(X) ---- X可以是矢量或矩阵
pie(X, explode) ---- explode的维数需和X维数一致,eplode中非零元素对应的切片是分离片
pie(... , labels) ---- labels加上自定义的标注,维数需和X维数相同
如果X中各个元素的和大于等于1时,绘制出的饼图中每个切片占整个饼图的百分比为这个元素值在X的元素值和中的百分比;如果X中各个元素的和小于1时,绘制的是一个不完整的饼图。
⑸ 排列图格式:
pareto(Y) ---- 条形长度对应于Y元素数值,Y递减顺序的下标为x轴的数值
pareto(Y, names) ---- 参数names关联于每个条形图x轴标识
pareto(Y, X) ---- 参数X关联于每个条形图x轴下标
2. 等高线:
地理、气象等领域经常需要绘制等高线。MATLAB中提供了二维等高线和三维等高线,还有一种等高线函数提供计算数组功能。
二维等高线 |
二维填充等高线 |
三维等高线 |
等高线函数 |
contour |
contourf |
contour3 |
contourc |
等高线格式:
contour(X, Y, Z) --- Z为高度矩阵,X和Y代表x轴和y轴取值(可省略),3数组维数要匹配
contour(X, Y, Z, n) --- 参数n代表等高线的条数
contour(X, Y, Z, v) --- 参数v定义绘制等高线位置的向量,其中的元素代表等高线基准值
[C,h]=contour(...) ---- 获取等高线句柄,然后可以使用clable(C,h)来加标注
3. 矢量图:
MATLAB中有一组函数来表现图形的矢量性:
二维彗星图 |
罗盘图 |
羽状图 |
二维箭头图 |
三维彗星图 |
三维箭头图 |
comet |
compass |
feather |
quiver |
comet3 |
quiver3 |
⑴ 彗星图comet:彗星图是为了动态表示质点的运行情况
格式有:
comet(x, y, p)
comet(y)
comet(x, y)
其中,参数p决定彗星长度,默认值0.1,此时二维彗星图中彗长为p*length(y)
⑵ 罗盘图compass:用来显示起点在坐标原点的向量。
compass(X, Y) ---- 表示绘制以图形原点为起点以(X(i), Y(i))为终点的向量箭头图,等价于:
compass(real(X), image(Z))
这个函数采用的是笛卡尔坐标系,而且在圆形栅格上绘制向量,但是圆形栅格的最外层标注的却是极坐标系下的角度,各个小圆上标注的则是向量的长度,所以需要将极坐标系下的角度转换成直角坐标,再绘制罗盘图。从极坐标的角度转换成直角坐标的函数是pol2cart,使用cart2pol函数就是相反的功能。
⑶ 羽状图feather:
羽状图也是以箭头形式显示的一组向量,这些向量的起点均分在一条与X轴平行的直线上。
feather(X, Y)
⑷箭头图quiver:通常用来表现方向
quiver(X, Y, U, V) ---- 二维箭头图在点(X, Y)上用箭头绘制具有元素(U, V)的速度向量
quiver(... ,scale) ---- 参数scale代表缩放的比例,scale=0时自动调整缩放比例以防止交叠
quiver3(X, Y, Z, U, V, W) ---- 3维箭头图在点(X, Y, Z)上用箭头绘制具有元素(U, V, W)的速度向量
4. 离散图:(已过时,但还可以用)
科学计算和工程用于中常会产生大量离散数据,MATLAB提供了一些函数来绘制这些数据以图形形式形式出来。
二维柄状图 |
三维柄状图 |
阶梯图 |
stem |
stem3 |
stairs |
⑴ 柄状图stem和stem3:柄状图就是将每个离散数据显示为末端带有标志符号的线条
stem(Y)
stem(X, Y)
stem(... , 'fill') ---- 参数fill是对有些标记符号进行填充
stem(... , LineSpec) ---- 参数LineSpec定义线型、标记符号的类型以及颜色,参数可同时使用
当Y为矩阵时会递加绘制每一列数据的柄状图,参数X可以是向量或矩阵,X为矩阵时X和Y的维数需要相同;X为向量而Y为矩阵时,X的长度需要和Y的行数保持一致。
三维柄状图stem3的用法与stem类似。
⑵ 阶梯图stairs:以一定间隔的上升沿或下降沿显示数据
在阶梯图中可以体现出数据的变换情况,格式:
stairs(Y)
stairs(X, Y)
[xb, yb]=stairs(...) ---- 其中的返回值[xb, yb]对应plot(xb, yb),以实现stairs函数的功能
5. 直方图:
直方图是通过一组矩阵条来反映数据的分布情况,有笛卡尔坐标系和极坐标系的两种。
⑴ 笛卡尔坐标系下直方图:
hist(Y) ---- Y可以是向量也可以是矩阵,当Y为向量时将Y中的元素均匀分成10块,直方图的高度表示每一部分元素的个数。当Y为MxP的矩阵时每一列绘制一个矩阵组。
hist(X, Y) ---- X为向量则创建length(X)个区域,每个区域的中心对应于X的各个元素位置
hist(Y, nbins) ---- 参数nbins指定区域的个数
histc函数计算由bar函数绘制直方图
⑵ 极坐标下直方图:
rose(theta) ---- theta对应角度数据
rose(theta, X) ---- X定义了小扇形的位置,其维数决定了小扇形的个数
rose(theta, nbins) ---- 定义了小扇形的个数,默认20
6. 散点图:
散点图用于大量数据分布情形的统计分析,MATLAB有三个函数用于绘制散点图。
⑴ scatter函数和scatter3函数:分别为二维散点图和三维散点图(已过时,但还可以用)
scatter(X, Y, S, C)
scatter(X, Y)
scatter(X, Y, S)
在向量X和Y所在的坐标处绘制一个图标;参数S定义图标的大小,可以是常量或向量,是常量时图标大小相同,是向量时长度应与X、Y相同;参数C定义图标的颜色,C可以是颜色字符串,如r、y等,为向量时长度需与X一致,当C为length(X)*3的矩阵时用RGB参数定义图标颜色。
scatter(... , markertype) ---- markertype定义图标的线型、点型和颜色,默认为o,即圆形
scatter(... , 'filled') ---- filled参数表示填充图标
⑵ plot绘制散点图:
绘制二维散点图也可以用plot,对于散点图中多边形区域内散点的选定可以使用inpolygon来实现。IN=inpolygon(X, Y, xv, yv)中矩阵IN的大小和X、Y相同,IN的每个元素值可能是1、0.5、0。假设一个散点(p, q),判定(p, q)与xv、yv多边形的关系为:
·点(p, q)在多边形内,IN(p, q)=1
·点(p, q)在多边形线上,IN(p, q)=0.5
1点(p, q)在多边形外,IN(p, q)=0
⑶ plotmatrix函数:实现散点图矩阵的绘制
plotmatrix(X, Y)
plotmatrix(Y)
如果X是pxm矩阵,Y是pxn矩阵,此指令就在当前窗口中产生nxm个axis轴对象,并在其上分别绘制散点图。但在对角线上的axis对象用hist(Y(:, i))指令绘制条形图。
7. 面和多边形:
MATLAB中绘制多边形和面的函数很多,如圆柱体函数cylinder、球体函数sphere、椭圆体函数ellipsoid、彩带图函数ribbon等。
⑴ [X,Y,Z]=cylinder(r, n):
返回半径为r的圆柱形图的x、y、z轴的值,参数r为圆周半径,默认1;参数n为组成圆周的点数,默认20。
⑵ [X,Y,Z]=ellipsoid(xc, yc, zc, xr, yr, zr, n):
产生三个(n+1)x(n+1)矩阵[X,Y,Z],然后以(xc,yc,zc)为中心点、以(xr,yr,zr)为半径,用指令surf(X,Y,Z)来绘制椭圆体图形,n默认20,椭圆体数据产生公式为:
⑶ Sphere(n):绘制球体
Sphere函数使用surf函数和mesh函数来产生x、y、z轴的单位球,包含nxn面的球体,默认20x20。
⑷ ribbon(Y):绘制彩带
ribbon(Y) --- 以X=1:size(Y,1)绘制分离的三维Y列彩带
ribbon(X, Y) --- 中X和Y具有相同大小的矢量或矩阵。如果X是一个行矢量或列矢量时,Y矩阵需有length(X)行。
ribbon(X,Y,width) --- 参数定义了彩带的宽度,默认值0.75
⑸ 填充图fill和fill3:分别用于二维和三维多边形的填充
fill(x, y, c) ---- 填充图主要绘制多边形,并在多边形中填充色图。需要保证绘图数据首尾重合,使得勾画的多边形封闭。不重合时强制首尾两点相连。c定义填充的颜色。
fill3l(x, y, z, c) ---- 函数中x、y和z的相应的列构成一个三维封闭多边形,有几列就有几个多边形。为使得多边形封闭,每列的首尾元素应该重合;若不重合,默认将首尾两点相连,强行使多边形封闭。c定义填充的颜色。
8. 函数绘图:
MATLAB提供了一些绘图函数,无需数据准备,直接根据符号公式绘制。
⑴ 轮廓线:
ezcontour(f)
ezcontour(f, domain)
ezcontour(... ,n)
其中,f可以是字符表达式、符号函数、自定义函数、内联函数等;domain表示符号范围,可以为四元矢量[xmin,xmax,ymin,ymax]或二元矢量[min,max],缺省为-2π<x<2π,-2π<y<2π。参数n表示domain缺省值为nxn网格,默认值60。ezcontour函数可以自动在图形上加上标题和坐标轴标识。
⑵ 填充色轮廓线:
ezcontourf(f)
ezcontourf(f, domain)
ezcontourf(... ,n)
ezcontourf函数可以自动在图形上加上标题和坐标轴标识。
⑶ 网格线:
ezmesh(f)
ezmesh(f,domain)
ezmesh(x,y,z)
ezmesh(x,y,z,[smin,smax,tmin,tmax])
ezmesh(x,y,z,[min,max])
ezmesh(... , n)
ezmesh(... ,'circ')
其中,参数(x,y,z)表示x=x(s,t), y=y(s,t), z=z(s,t),-2π<s<2π,-2π<t<2π。'circ'表示在domain区域中间绘制。
⑷ 带有轮廓线的网格图:
ezmeshc(f)
ezmeshc(f,domain)
ezmeshc(x,y,z)
ezmeshc(x,y,z,[smin,smax,tmin,tmax])
ezmeshc(x,y,z,[min,max])
ezmeshc(... , n)
ezmeshc(... ,'circ')
⑸ 曲面图:
ezsurf(f)
ezsurf(f,domain)
ezsurf(x,y,z)
ezsurf(x,y,z,[smin,smax,tmin,tmax])
ezsurf(x,y,z,[min,max])
ezsurf(... , n)
ezsurf(... ,'circ')
⑹ 带轮廓线的曲面图:
ezsurfc(f)
ezsurfc(f,domain)
ezsurfc(x,y,z)
ezsurfc(x,y,z,[smin,smax,tmin,tmax])
ezsurfc(x,y,z,[min,max])
ezsurfc(... , n)
ezsurfc(... ,'circ')
⑺ 二维曲线:
ezplot(f)
ezplot(f,[min,max])
ezplot(f,[xmin,xmax,ymin,ymax])
ezplot(x,y)
ezplot(x,y,[tmin,tmax])
ezplot(... , figure)
其中,如果f为f(x,y)则绘制f(x,y)=0的图形;参数figure表示在自定义图形句柄中绘图。
⑻ 三维曲线:
ezplot3(x,y,z)
ezplot3(x,y,z,[tmin,tmax])
ezplot3(... , 'animate')
其中,'animate'表示绘制三维曲线的动画踪迹。
⑼ 极坐标曲线:
ezpolar(f)
ezpolar(f, [a,b])
绘制rho=f(theta)的极坐标曲线,a<theta<b,默认为0<theta<2π
⑽二维函数精确绘图:
fplot采用自适应步长控制来绘制函数function,在函数变化剧烈的区间采用小的步长,否则采用大的步长。
fplot('function',limits)
fplot('function',limits,LineSpec)
fplot('function',limits,tol)
fplot('function',limits,tol,LineSpec)
fplot('function',limits,n)
[X,Y]=fplot('function',limits, ...)
[...]=plot('function',limits,tol,n,LineSpec,P1,P2)
fplot函数也可以实现ezplot函数的功能。参数'function'对应函数名,参数limits指定x轴或x与y轴的数据范围;参数LineSpec对应了线型;参数tol表示相对误差,缺省值为2e-3;参数n表示绘图图形的点数n+1(当n>-1),最大步长不超过(xmax-xmin)/n;参数P1、P2等表示可以直接为函数输入参数,形为y=function(x,P1,P2, ...)
9. 有一些已过时的绘图函数: 还可以使用
spy ---- Visualize sparsity pattern
plotmatrix ---- Scatter plot matrix
heatmap ---- Create heatmap chart
sortx ---- Sort elements in heatmap row
sorty ---- Sort elements in heatmap column
wordcloud ---- Create word cloud chart from text data
geobubble ---- Visualize data values at specific geographic locations
geolimits ---- Set or query geographic limits
四、动画:
MATLAB中有两种创建动画序列的方法,保存大量不同的图片以电影的形式播放,在屏幕上连续擦除和重绘对象且每次重绘递增改变。
1. 电影式动画:
创建和显示电影式动画主要有两个步骤:
·调用getframe函数生成每个帧,该函数返回一个列矢量,用列矢量创建帧动画矩阵
·调用movie函数按照指定的速度和次数运行该动画
通常情况下,在一个for循环中使用getframe指令生成动画帧数组,getframe函数返回一个结构,包含下列字段:
⑴ cdata:以int8类型数组保存图像数据,对于索引颜色系统上数组大小heightxwidth,对于真彩色系统上数组大小为heightxwidthx3
⑵ colormap:在索引颜色系统上是一个nx3的数组,其中n为色彩数;真彩色系统中为空
示例:
for k=1:16
plot(fft(eye(k+16)))
axis equal
M(k)=getframe;
end
clf,axes('Position',[0 0 1 1])
movie(M,30)
如果需要捕获整个图形窗口的内容,可以把图形句柄作为变量指定给getframe函数。示例:
h=uicontrol('style','slider','position',[10 50 20 300],'Min',1,'Max',16,'Value',1)
for k=1:16
plot(fft(eye(k+16)))
axis equal
set(h,'Value',k)
M(k)=getframe(gcf);
end
上面代码为前面的示例添加了一个滑块来指示其中的k值。
2. 重绘式动画:(新版本已不再支持,改为使用ANIMATEDLINE)
重绘的过程就是重复绘制、擦除的过程,使用plot或plot3的EraseMode属性,不同的擦除模式会有不同的动画效果。有3种方式:
·none:对象移动时不擦除对象
·background:在图形对象移开后,在原来位置用背景色重绘,即将原来的对象完全擦除
·xor:只擦除对象本身,是大多数重绘动画采用的模式
五、三维图形的精细控制:
MATLAB提供了一些控制函数,有视角的控制、光度的控制、色彩的控制、透明度控制等。
1. 视角:
MATLAB提供了视点控制函数view。格式有:
⑴ view(az, el)和view([az, el]):设置空间图形视点的方位
其中,方位角az和俯视角el为两个旋转角度。作一通过视点与z轴的平面,与xy平面有一交线,该交线与y轴的反方向的(从z轴的方向观察)按逆时针方向的夹角就是方位角az,若角度为负值则按顺时针方向;在通过视点与z轴的平面上,用一直线连接视点与坐标原点,该线与xy平面的夹角就是视点的俯视角el,若el为负值则视点转移到曲面下方。
⑵ view([x, y, z]):笛卡尔坐标系中在点(x, y, z)设置视点
⑶ view(2):设置缺省的二维形式视点,其中az=0°,el=90°,即从z轴上方观看
⑷ view(3):设置缺省的三维形式视点,其中az=-37.5°,el=30°
⑸ view(T):根据转换矩阵T设置视点,其中T为4x4阶的矩阵,如同使用viewmtx指令生成的透视转换矩阵一样。
⑹ [az, el]=view(...):返回当前的方位角az与俯视角el
2. 图形旋转:
图形旋转有rotate和rotate3d指令,rotate指令可以直接使对象绕方向轴旋转一定角度,rotate3d指令通过鼠标旋转图形。
⑴ rotate(h, direction, alpha):把图形对象h旋转alpha角度,参数direction为二元或三元矢量,定义了关于原点的方向轴。
⑵ rotate(... , origin):参数origin为三元矢量,定义了旋转方向轴,缺省时为坐标原点
3. 灯光效果:
MATLAB中,灯光效果有几条指令。
⑴ camlight指令:表示在摄像轴上创建或移动一个灯光对象
canlight headlight ---- 创建相对于摄像上方的灯光
canlight right ---- 创建相对于摄像右方的灯光,默认值
camlight left ---- 创建相对于摄像左方的灯光
camlight ---- 创建相对于摄像默认方位--右方上的灯光,
camlight(az, el) ---- 以摄像位置为旋转中心,方位角为az度、俯视角为el度旋转创建灯光
camlight(... , 'style') ---- 参数style有local、infinite两个值,local为缺省值,表示近光源,光源向各个方向都辐射灯光;infinite表示无穷远光源,灯光发光与光线平行
camlight(light_handle, ...) ---- 表示应用指定对象的灯光,返回灯光对象
light_handle=camlight(...)
⑵ light函数:表示在当前坐标轴上创建一个灯光对象
light('PropertyName', ProtertyValue, ...)
handle=light(...)
light可以直接修改灯光对象的属性,缺省设置为白光、无穷远、穿过[1, 0, 1]射向坐标原点。
⑶ lightangle函数:表示在球面坐标轴上创建或安置一个灯光对象
lightangle(ax, el) ---- 表示在方位角az和俯视角el创建一个灯光对象
light_handle=lightangle(ax, el) ---- 添加一个灯光句柄,便于改变方位角和俯视角
lightangle(light_handle, ax, el)
[ax el]=lightangle(light_handle)
⑷ lighting指令:设定照明模式
lighting flat ---- 入射光均匀射入图形面上,默认值
lighting gouraud ---- 先对顶点颜色插补,再对顶点勾画的面色进行插补,用于曲面表现
lighting phong ---- 对顶点法线插值,再计算像素的反光
lighting none ---- 关闭所有光源
⑸ material函数:控制光效果的材质
material shiny ---- 使对象比较明亮
material dull ---- 使对象比较暗淡
material metal ---- 使对象带有金属光泽,默认值
material default ---- 返回默认设置模式
material([ka kd ks])
material([ka kd ks n])
material([ka kd ks n sc])
反射五要素[ka kd ks n sc],其中ka设置无方向性均匀的背景光强度,kd设置无方向性的软反射的漫反射强度,ks设置有向硬反射光的强度,n设置控制镜面亮点大小的镜面指数,sc控制镜面颜色的反射系数。
4. 色彩控制:
⑴ 缺省设置:
MATLAB中colordef函数用来对根对象Root所有子对象用色的缺省设置。调用格式有:
colordef white ---- 设置对象的背景色为白色,轴线和标签为黑色,并且窗口背景色为淡灰色
colordef black ---- 设置对象的背景色为黑色,轴线和标签为白色,并且窗口背景色为暗灰色
colordef none ---- 设置窗口色彩为MATLAB的彩色,即黑色背景
colordef(fig, color_option) ---- 设置由Figure句柄fig定义的颜色配置为颜色选项
h=colordef('new', color_option) ---- 返回由颜色选项决定创建的窗口对象的句柄
颜色选项为'white'、'black'、'none'。colordef是设置图形所有对象默认值设置的上层指令,其影响其后产生的所有的图形对象用色特点。如果指定对象句柄,则只对该对象(包括子对象)的用色产生影响。
⑵ 对窗口对象的子对象色彩的设置:
whitebg ---- 补充当前图形对象的颜色
whitebg(h) ---- 补充句柄h定义的所有图形对象的用色
whitebg(ColorSpec) ---- 改变窗口对象的子对象轴对象的颜色为ColorSpec
whitebg(h, ColorSpec)
⑶ 色图:
图形图像处理中色彩的表现非常重要,色图技术是图形图像着色的基础。图形对色图的改变由colormap来实现。格式为:
colormap(map) ---- 把色图设置为数组map,如果在map中任何一个数值在[0 1]外就出错
colormap('default') ---- 设置当前色图为默认色图
cmap=colormap ---- 获取当前色图
色图是一个mx3的数组,元素值为0、1间的实数值,每行是一个真彩色向量,第k行色彩表示第k个颜色,map(k,:)=[r(k) g(k) b(k)]分别对应了红色、绿色和蓝色。
MATLAB还提供了一些预定义色图:
色图 |
说明 |
色图 |
说明 |
autumn |
平滑的红、桔黄、黄 |
jet |
蓝头红尾饱和色 |
bone |
高蓝色灰度渐进 |
lines |
Plot绘线色 |
colorcube |
三纯色浓淡交错色 |
pink |
淡粉红色图 |
cool |
青、品红浓淡色 |
prism |
光谱交错色 |
copper |
纯铜色调线性浓淡色 |
spring |
青黄浓淡色 |
flag |
红白蓝黑交错色 |
summer |
绿黄浓淡色 |
gray |
灰色调线性浓淡色 |
winter |
蓝绿浓淡色 |
hot |
黑红黄白浓淡色 |
white |
纯白色 |
hsv |
两端为红的饱和色 |
|
|
这些值可用于colormap(map) 中,作为map参数。
⑷ 浓淡处理:控制着色的浓淡处理
shading指令选项有:
选项 |
说明 |
flat |
每根网格线或贴片都着一种颜色,颜色取线段两端或贴片顶点中下标最小的那点颜色 |
interp |
网格线或贴片由两端或顶点的颜色经插值而得 |
faceted |
在flat着色基础上,再在贴片的四周勾画黑色网线 |
示例:
shading interp
5. 透明度:
把图形对象设置成透明效果,让用户不仅看到图形对象的外观,而且可以看到图形对象的内部结构特征。图形的透明度用0到1之间的值表示,用alpha表示。当alpha等于0时,图形完全透明;当alpha等于1时,图形完全不透明。
MATLAB中处理透明度的方法和处理色彩类似:
·面元和表面可以定义单面和边的alpha值,或再根据图形的alpha查找表的值平滑或插值透明度值
·图像、面元和表面对象可以将alpha数据用于alpha查找表或直接用于alpha值
·坐标系对象定义alpha的范围,其控制对象数据向alpha值的映射
·图形窗口对象包含alpha查找表,这是一个mx1数组,元素为alpha值
MATLAB图形对象中一些属性控制着对象的透明度:
属性 |
说明 |
AlphaData |
图形和表面对象的透明度数据 |
AlphaDataMapping |
透明度数据映射方式 |
FaceAlpha |
面的透明度(只对面元和表面可用) |
EdgeAlpha |
边的透明度(只对面元和表面可用) |
FaceVertexAlphaData |
只对面可用的alpha数据属性 |
ALim |
alpha坐标限制 |
AlimMode |
alpha坐标限制模式 |
Alphamap |
图形对象alpha查找表 |
MATLAB还提供一些透明度设置的函数:
函数 |
说明 |
alpha |
设置或查询当前坐标系中图形对象的透明度 |
alphamap |
指定图形窗口的alpha查找表 |
alim |
设置或查询坐标系的alpha限制 |