Matlab绘图基础

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

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

1.以图识图

  在Matlab中新建一个矩阵,在左侧工作区窗口中选中这个变量,点击菜单“绘图”,即可以查看Matlab的各种图形:

点击“显示更多”小箭头:

点击左下角“目录”按钮:

从这里可以看到所有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”指令,下面是一个例子:

  在说具体数据格式之前,先要说一下“采样”和“插值”。这里说的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);

上图中已经可以对图形进行缩放、平移、旋转、拾取数据、刷亮、图形链接、插入颜色栏、插入图例等功能,通过在菜单中选择还可以添加光照、坐标轴标签等,点击上图中的红色箭头所指按钮后将显示更多绘图工具栏

可以看到这已经是一个非常强大的编辑界面了,点击上图右下角按钮“更多属性…”,将看到:

这里可以进行更为全面的控制,很容易猜到,这里的项和指令代码有很好的对应。通过一番调整,且没有写任何代码,我的图已经变成如下样子(峰值数据是通过拾取工具得到的):

  如果觉得格式调整的好,还可以将所有的设置和调整“打包”成代码,在图形窗口中点击菜单“文件 >>
生成代码…”即生成一个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)‘)

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”(在线版本)。

时间: 2024-10-10 08:28:59

Matlab绘图基础的相关文章

Matlab绘图基础——用print函数保存图片(Print figure or save to file)

一.用法解析... 1 1.1. 分辨率-rnumber. 1 1.2.  输出图片的“格式”formats. 1 二.用法示例... 1 2.1. 设置输出图片的“图像纵横比”... 1 2.2. Batch Processing(图片保存“批处理”)filename. 1 1.2. 输出图片的“格式”formats. 1 一.用法解析 print(figure_handle,'formats','-rnumber','filename') %将图形保存为formats格式,分辨率为600的(

Matlab编程基础

平台:Win7 64 bit,Matlab R2014a(8.3) "Matlab"是"Matrix Laboratory" 的缩写,中文"矩阵实验室",是强大的数学工具.本文侧重于Matlab的编程语言侧面,讲述Matlab的基本语法,以及用Matlab语言进行程序设计.值得一提的是,Matlab从R2014a版本开始支持中文语言了! 1.基本概念 Matlab默认启动后界面: Matlab有关的文件后缀: File Extension Des

Matlab绘图详解

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

(转载)MatLab绘图

转载自:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 转载自:http://www.cnblogs.com/jeromeblog/p/3396494.html plot选项: 一 基础功能 二维图形 一. plot函数① 函数格式:plot(x,y)  其中x和y为长度相同                     坐标向量     函数功能:以向量x.y为轴,绘制曲线. [例] 在区间0≤X≤2?内,绘制正弦曲线y=si

详尽全面的matlab绘图教程

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

Matlab 绘图完整入门

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

matlab绘图--线性规划图解法示意

matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4]; plot(L1(:,1),L1(:,2));hold on  text(4.1,3.5,'x_1=4','color','b');  L2=[0 3;5 3];  plot(L2(:,1),L2(:,2));hold on  text(0.8,3.1,'x_2=3','color','b');  L3=[0 2.4;5 0.4];  plot(L3(:,1),

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint.drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状

MATLAB图像处理基础

MATLAB图像处理基础 2.2.1 图像文件格式及图像类型 1.MATLAB支持的几种图像文件格式: ⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式. ⑵BMP(Windows Bitmap):有1位.4位.8位.24位非压缩图像,8位RLE(Run length Encoded)的图像.文件内容包括文件头(一个BITMAP FILEHEADER数据结构).位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜