MATLAB数学建模:数据图形可视化 您所在的位置:网站首页 数学建模原理图片 MATLAB数学建模:数据图形可视化

MATLAB数学建模:数据图形可视化

2024-07-01 08:33| 来源: 网络整理| 查看: 265

数据图形可视化

用图表和图形展现数据的技术被称为 数据图形可视化. 在本文中, 我们将简介MATLAB数据图形绘制机能. MATLAB 提供了丰富的绘图函数和绘图工具, 这些函数或工具的输出均显示在 MATLAB 命令窗口外的图形窗口中.

文章目录 数据图形可视化1. 创建和关闭图形窗口2. 绘制函数2.1 一元函数绘图2.2 二元函数绘图 3. 数据图形绘制3.1 离散数据可视化3.2 连续函数可视化 4. 二维绘图函数4.1 二维绘图基本准备4.2 二维绘图基本命令4.3 快速方程式绘图4.4 特殊二维图形4.4.1.1 极坐标系4.4.1.2 对数坐标系4.4.1.3 柱坐标系和球坐标系4.4.1.4 绘制特殊二维图形

1. 创建和关闭图形窗口

在 MATLAB 中, 我们可使用函数 Figure 建立图形窗口.

在 MATLAB 控制台中输入 Figure(int), 即可得到名为整数 int 的图形框. 图形框名默认为 1. 1. 1.

我们可以使用"图形编辑工具条"对图形进行编辑和修改, 亦可使用光标右键菜单栏对图形实行操作.

使用 close 指令可以关闭图形窗口. 其调用方式:

close %关闭当前图形窗口. close(x) %关闭指定的图形窗口. close name %关闭指定名称的图形窗口. close all %保留隐藏图形窗口, 关闭其余所有图形窗口. close all hidden %关闭所有图形窗口. status = close(...) %返回调用close函数关闭图形窗口的状态. %% 清除当前图形窗口内容可用的命令: clf %清除当前窗口所有可见图形对象 clf reset %清除当前窗口所有可见图形对象, 并设置窗口属性值为默认. 2. 绘制函数

利用MATLAB的某些内置绘图函数可以轻松实现函数可视化.

2.1 一元函数绘图

使用函数 ezplot 绘制任意的一元函数:

1. ezplot(f) 2. ezplot(f,[min,max]) 3. ezplot(x,y) 4. ezplot(f,[xmin,xmax,ymin,ymax]) 5. ezplot(x,y,[tmin,tmax]) 按 x x x 的默认取值范围绘制函数图形.按照 x x x 指定的取值范围绘制函数图形.按默认取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.按照指定的, x , y x,y x,y 的取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.按照 t t t 的取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.

[例]

绘制蔓叶线图形: y 2 ( 3 + x ) − ( 3 − x ) 3 y^{2}(3+x)-(3-x)^{3} y2(3+x)−(3−x)3

[解]

>> f = '(y.^2)*(3 + x) - (3 - x).^3'; >> ezplot(f)

代码执行结果如下: fig0

[例]

绘制 Archimede 螺线 (设 a = 3 a = 3 a=3) :

[解]

>> syms x y t; >> x = 3.*(cos(t) + t.*sin(t)); >> y = 3.*(sin(t) - t.*cos(t)); >> ezplot(x,y,[0,810]) >>

代码执行结果如下: fig1

2.2 二元函数绘图

对于二元函数 z = f ( x , y ) , z = f(x,y), z=f(x,y), 同样可使用符号函数提供的函数 ezmesh 绘制各类图形, 也可以使用 meshgrid 函数获得矩阵 z z z, 或用循环语句计算矩阵 z z z 的元素.

函数 ezmesh 该函数调用格式如下:1. ezmesh(f) 2. ezmesh(f,domain) 3. ezmesh(x,y,z) 4. ezmesh(x,y,z,[smin,smax,tmin,tmax]) 5. ezmesh(... ,n) 6. ezmesh(...,'circ') 按照 x , y x,y x,y 默认取值范围绘制二元函数 f f f 的图形.按照 domain 指定的取值范围绘制二元函数 f f f 的图形.按照 参数 s , t s,t s,t 的默认取值范围绘制函数 x = x ( s , t ) , y = y ( s , t ) , z = z ( s , t ) x = x(s,t), y = y(s,t),z = z(s,t) x=x(s,t),y=y(s,t),z=z(s,t) 的图形.按照指定的取值范围[smin,smax,tmin,tmax] 绘制函数 f ( x , y ) f(x,y) f(x,y) 的图形. 5.调用 ezmesh 绘制图形时, 同时绘制 n ∗ n n*n n∗n 的网格,默认 n = 60. n = 60. n=60.调用 ezmesh 绘制图形时, 以指定区域的中心绘制图形.

[例]

绘制函数 z = ( 1 − x 2 − y ) . z = \sqrt{(1-x^{2}-y)}. z=(1−x2−y) ​.

[解]

syms x y; f = 'sqrt(1-x.^2-y)'; ezmesh(f,20)

代码执行如下: fig2

函数 meshgrid 二元函数 z = f ( x , y ) z = f(x,y) z=f(x,y) 的因变量由两个自变量 x , y x,y x,y 决定. z z z 本质上是三位空间的一个曲面. MATLAB 将 z z z 存储于一个矩阵中, 其行和列分别表示为; z ( i , : ) = f ( x , y ( i ) ) z(i,:) = f(x,y(i)) z(i,:)=f(x,y(i)) z ( : , j ) = f ( x ( j ) , y ) z(:,j) = f(x(j),y) z(:,j)=f(x(j),y) 当 z = f ( x , y ) z = f(x,y) z=f(x,y) 可用简单的表达式所表示时, 我们调用 meshgrid 函数即可方便地获取所有 z z z 的数据. 随后,我们调用 surf 函数即可绘制出二元函数的图形.

[例]

绘制函数 z = ( x 2 − 1.5 x ) e − x 2 − y 2 − x y . z = (x^{2}-1.5x)e^{-x^{2}-y^{2}-x^{y}}. z=(x2−1.5x)e−x2−y2−xy.

[解]

[x,y]=meshgrid(-3:0.1:3,-2:0.1:2); z=(x.^2-1.5*x).*exp(-x.^2-y.^2-x.*y); mesh(x,y,z); subplot(2,2,1); surf(x,y,z); view(0,90); subplot(2,2,2); surf(x,y,z); view(90,0); subplot(2,2,3); surf(x,y,z); view(0,0); subplot(2,2,4); surf(x,y,z);

代码执行结果如下: fig3

此外, 在某些特殊情况下,我们也可以使用循环语句获取原本只需要使用 meshgrid 函数即可获得的矩阵数据.

3. 数据图形绘制

利用数据可视化方法, 我们可以通过图形这一展示方式, 从杂乱的离散数据中观察数据间的内在关联.

3.1 离散数据可视化

任何二元实数标量对 ( x a , y a ) (x_{a},y_{a}) (xa​,ya​) 可在一个平面上表示一个点, 任何二元实数向量对 ( X , Y ) (X,Y) (X,Y) 可在平面上表示一组点.

对于离散实函数 y n = f ( x n ) y_{n} = f(x_{n}) yn​=f(xn​), 当 X = [ x 1 , x 2 , ⋯   , x n ] X = [x_{1},x_{2},\cdots, x_{n}] X=[x1​,x2​,⋯,xn​] 以递增或递减的次序取值时, 有 Y = [ y 1 , y 2 , ⋯   , y n ] Y = [y_{1},y_{2},\cdots,y_{n}] Y=[y1​,y2​,⋯,yn​]. 将该向量对用直角坐标序列点展示时, 即实现了离散数据的可视化.

当处理离散量时, 我们可以使用 离散序列图 来表示离散量的变化情况. 在 MATLAB 中, 我们使用 stem 实现离散图形的绘制:

stem(y)

以 x = 1 , 2 , 3 , ⋯ x = 1,2,3,\cdots x=1,2,3,⋯ 作为每个数据点的 x x x 轴的坐标, 以向量 y y y 的值作为纵坐标. 在 ( x , y ) (x,y) (x,y) 坐标点处绘制一个空心圆, 并连接一条线段至 X X X 轴.

[例]

绘制一个离散序列图:

figure t = linspace(-11.4,51.4,8); h = stem(t); set(h(1),'MarkerFaceColor','blue') set(h(2),'MarkerFaceClolr','red','Marker','square')

图形输出如下: fig4

stem(x,y,'option')

以 x x x 的各个元素为横坐标, 以 y y y 的各个元素为纵坐标, 在 ( x , y ) (x,y) (x,y) 坐标点绘制一个空心圆, 并连接一条线段至 X X X 轴. 可通过 options 选项控制绘图时的线型和颜色等设置.

stem(x,y,'filled')

以 x x x 的各个元素为横坐标, 以 y y y 的各个元素为纵坐标, 在 ( x , y ) (x,y) (x,y) 坐标点绘制一个实心圆, 并连接一条线段至 X X X 轴.

[例]

用 stem 函数绘制一个线型为圆圈的离散序列图:

figure x = 0:20; y = [exp(-0.05*x).*cos(x);exp(0.06*x).*cos(x)]'; h = stem(x,y); set(h(1),'MarkerFaceColor','blue') set(h(2),'MarkerFaceColor','red','Marker','square')

输出图形如下; fig5

注:除了使用 stem 命令外, 我们也可以直接使用离散数据绘制离散图形.

[例]

用图形表示离散函数: y = 1 ∣ n − 6 ∣ ,     n = 1 , 2 , ⋯   , 10. y = \frac{1}{|n-6|}, \ \ \ n = 1,2,\cdots, 10. y=∣n−6∣1​,   n=1,2,⋯,10.

[解]

n = 0:10 %产生一组十个自变量 y = 1./abs(n-6); %计算对应的函数值 plot(n,y,'r*','MarkerSize',25) %使用尺寸为25的红色星号标记函数点 grid on %绘制坐标方格

输出图形如下: fig6

3.2 连续函数可视化

我们可以对连续函数取一组离散自变量, 并计算函数值, 再用相同方法显示.

MATLAB在简易二维画图中会标出相应的离散数据点, 并且将这些点直接相连. 点越多, 绘制的曲线越平滑.

[例]

用图形表示连续调制波形 y = s i n ( t ) s i n ( 9 t ) . y = sin(t)sin(9t). y=sin(t)sin(9t).

[解]

t1 = (0:12)/12 *pi; %自变量取12+1 = 13个点 y1 = sin(t1).*sin(9*t1); %计算函数值 t2 = (0:50)/50 *pi; %自变量取51个点 y2 = sin(t2).*sin(9*t2); subplot(2,2,1); %在子图1上绘制 plot(t1,y1,'r.'); %设定数据点颜色为红色 axis([0,pi,-1,1]); %定义坐标大小 title('SubPlot 1'); %定义子图标题 %子图2数据点为红色 subplot(2,2,2); plot(t2,y2,'r.'); axis([0,pi,-1,1]); title('SubPlot 2'); %子图3用直线连接红色的数据点 subplot(2,2,3); plot(t1,y1,t1,y1,'r.') axis([0,pi,-1,1]); title('SubPlot 3'); %子图4用直线连接数据点 subplot(2,2,4); plot(t2,y2) axis([0,pi,-1,1]); title('SubPlot 4');

输出图形如下: fig7

4. 二维绘图函数

本节将简介二维绘图中的常用函数及其用法.

4.1 二维绘图基本准备

准备数据 选择需要展现的数据范围, 产生自变量采样向量. 计算相应的函数值并生成函数值向量. 若需要绘制二维曲线, 则需要准备横纵坐标数据. 若要绘制三维曲面, 则需要准备矩阵参变量和对应的 z z z 轴坐标.

指定图形窗口和子图位置 我们使用 figure 命令指定图形窗口. 该函数默认将打开 Figure1 或当前已经打开的窗口或子图. 我们还可以使用 subplot 指定当前子图.

绘制图形 根据数据绘制曲线后, 设置曲线的绘制参数, 包括线型, 颜色, 数据点形状等.

设置坐标轴和图形注释 设置坐标的范围, 刻度和坐标分割线等, 并设定包括图名, 坐标名, 图例, 文字说明等的图形注释. 格式:

title('图名') %指定图名 xlabel('x轴名') %指定x轴名 ylabel('y轴名') %指定y轴名 legend('指定图例') %图例 text(2,0.5,'函数') %指定文字 axis([xmin,xmax,ymin,ymax]) %设置坐标轴范围 grid on %绘制坐标分割线

精细修饰图形 我们可以利用对象或图形窗口的菜单和工具栏进行设置, 属性设定则需要使用图形句柄进行操作.

按指定格式保存或导出图形 将绘制的图形保存为指定格式的文件.

4.2 二维绘图基本命令

二维图形绘图命令 plot 调用格式如下:

1. plot(X,'s') 2. plot(X,Y,'s') 3. plot(X1,Y1,'s1',X2,Y2,'s2',...) X X X 是实向量时, 以向量元素的下标为其横坐标, 元素值为纵坐标绘制一连续曲线. X X X为实矩阵时, 按列绘制每列元素值对应其下标的曲线, 曲线数目等于 X X X 矩阵的列数. X X X 是复数矩阵时, 按列分别以元素实部和虚部为横, 纵坐标绘制多条曲线. X , Y X, Y X,Y 为同维向量时, 绘制以 X , Y X,Y X,Y 元素为横, 纵坐标的曲线. X X X 为向量, Y Y Y 是有一维和 X X X 等维的矩阵时, 则绘出多根不同颜色的曲线. 曲线数等于 Y Y Y 的另一维数, X X X 作为这些曲线的共同坐标. X X X 为矩阵, Y Y Y 为向量时, 情况同上, Y Y Y 作为共同坐标. X , Y X,Y X,Y 是同维矩阵时, 以 X , Y X,Y X,Y 对应的元素为横, 纵坐标分别绘制曲线, 曲线数目等于矩阵的列数.s1 , s2 是用于指定线型, 颜色, 数据点形的字符串.

[例]

绘制连续调制波形及其包络线.

[解]

t = (0:pi/100:4*pi)'; %生成长度为101的时间采样序列 y1 = sin(t)*[1,-1]; %包络线的函数值:一个101*2矩阵 y2 = sin(t).*sin(9*t); %生成一个长101的调制波列向量 t3 = pi*(0:9)/9; y3 = sin(t3).*sin(9*t3); plot(t,y1,'r:',t,y2,'b',t3,y3,'b*') %绘制三组曲线 axis([0,2*pi,-1,1]) %控制数轴范围

输出图形如下: fig8

[例]

采用模型: x 2 a 2 + y 2 25 − a 2 = 1 \frac{x^{2}}{a^{2}} + \frac{y^{2}}{25-a^{2}} = 1 a2x2​+25−a2y2​=1 绘制一组椭圆.

[解]

th = [0:pi/50:2*pi]'; a = [0.5:.5:4.5]; X = cos(th)*a; Y = sin(th)*sqrt(25 - a.^2); plot(X,Y) axis = ('equal') xlabel('x') ylabel('y') title('A Set Of Eclipses')

输出图形如下: fig9

4.3 快速方程式绘图

MATLAB中的快速方程式绘图函数包括 fplot 和 ezplot.

fplot 该函数功能为单纯地绘制方程式图形, 图形的 ( x , y ) (x,y) (x,y) 坐标值会由函数自行获取, 但是需要输入 x x x 坐标的范围. 调用语法如下:

fplot('函数',[xmin,xmax])

ezplot 该函数功能类似于 fplot, 但可以绘出显函数, 隐函数和参数式. 调用格式如下:

1. ezplot('函数方程',[xmin,xmax,ymin,ymax]) 2. ezplot('x参数式','y参数式',[tmin,tmax])

[例]

使用 ezplot 函数绘制参数式: x = c o s ( 5 t ) ,     y = s i n ( 3 t ) ,     t ∈ [ 0 , 2 π ] . x = cos(5t), \ \ \ y = sin(3t), \ \ \ t \in [0,2\pi]. x=cos(5t),   y=sin(3t),   t∈[0,2π].

[解]

ezplot('cos(5*t)','sin(3*t)',[0,2*pi])

输出图形如下: fig10

4.4 特殊二维图形

在使用基本绘图函数时,它们所输出的图形坐标轴刻度均为线性刻度. 然而, 当实际问题的数据出现指数变化时, 就无法直观地使用基本绘图函数表现数据的指数变化. 为解决这个问题, 我们需要使用 MATLAB 所提供的多种特殊的绘图函数.

i. 特殊坐标图形的绘制 此处的"特殊坐标"是指非 Descartes 坐标系, 具体包括极坐标系, 对数坐标系. 柱坐标系和球坐标系.

4.4.1.1 极坐标系

polar 函数可用于描绘极坐标图象. 其调用格式为:

polar(theta,rho,LineSpec)

其中, theta 为极角, rho 为极轴, LineSpec 为控制图中线型, 符号和颜色的绘图格式控制参量.

[例]

绘制心型曲线: a = -2*pi:.001:2*pi; b = (1-sin(a)); polar(a,b,'r') 输出图形如下: fig11

4.4.1.2 对数坐标系

MATLAB 提供了绘制不同形式的对数坐标曲线的功能. 具体实现的函数有: semilogx, semilogx(y), semilogy.

semilogx, semilogy

x x x ( y y y) 轴对数坐标图. 即:使用该函数绘制图形时 x x x ( y y y) 轴将使用对数坐标.

semilogx(y) 若 y y y 为实数向量或矩阵, 则 semilogx(y) 结合 y y y 列向量的下标和 y y y 的列向量绘制出线条. 若 y y y 为复向量或复矩阵, 则 semilogx(y) 此时等价于 semilogx(real(y).image(y)).

[例]

y = [1+1*i, 4+5*i, 1+4*i, 8+1*i, 0+3*i, 6+4*i]; semilogx(y)

输出图形如下: fig12

4.4.1.3 柱坐标系和球坐标系

在 MATLAB 中没有在柱坐标和球坐标下直接绘制图形的命令, 但我们仍可以使用 pol2cart , sph2cart命令将待绘制的柱坐标或球坐标值转换为直角坐标下的坐标值, 并在直角坐标下绘制数据图形.

pol2cart 命令调用格式如下:

[x,y] = pol2cart(theta,rho,) [x,y,z] = pol2cart(theta,rho,z)

sph2cart 命令调用格式如下:

[x,y,z] = sph2cart(theta,phi,r)

[例]

在直角坐标系下绘制柱坐标数据的图形:

theta = 0:pi/20:2*pi; rho = sin(theta); [t,r] = meshgrid(theta,rho); z = r.* t; [X,Y,Z] = pol2cart(t,r,z); mesh(X,Y,Z)

输出图形如下: fig13

4.4.1.4 绘制特殊二维图形

在 MATLAB 中, 还有其余可用来绘制不同类型的二维图形的绘图函数.:

1. bar(横坐标,纵坐标) %绘制条形图 2. fplot(某个函数,[精确绘图范围]) %精确绘图 3. polar(极角,函数) %绘制极坐标图像 4. stairs(横坐标,纵坐标) %绘制阶梯图 5. line([x1,y1],[x2,y2],...) %绘制折线图 6. fill(横坐标,纵坐标,点的颜色) %绘制实心图 7. scatter(横坐标,纵坐标,面积,颜色) %绘制散点图 8. pie(x) %绘制饼图 9. contour(x) %绘制等高线

[例]使用函数绘制一个针状图:

x = 0:0.05:3; y = (x.^0.4).*exp(-x); stem(x,y)

输出图形如下: fig14

[例]使用函数绘制阶梯图:

x = 0:0.5:10; stairs(x,sin(2*x)+sin(x));

输出图形如下: fig15

[例]使用函数绘制饼图:

x = [13,28,23,44,21]; pie(x)

输出图形如下: fig16

割开饼图中的紫色扇形块:

x = [13,28,23,44,21]; y = [1,0,0,0,0]; pie(x,y)

输出图形如下: fig17

[例]绘制二维等高线:

x = linspace(-2*pi,2*pi); y = linspace(0,4*pi); [X,Y] = meshgrid(x,y); Z = sin(X) + cos(Y); figurecontour(X,Y,Z) grid on

输出图形如下: fig18

[例]绘制误差条图:

y = [11 45 14 19 19]; e = [3.6 4.3 6.4 1.9 1.9]; errorbar(y,e)

输出图形如下: fig19

[例]使用scatter函数绘制二位散点图:

x = [1:40]; y = rand(size(x)); scatter(x,y)

输出图形如下: fig20

[例]绘制向量图:

[x,y,z] = peaks(30); [dx,dy] = gradient(z,.2,.2); contour(x,y,z) hold on quiver(x,y,dx,dy) colormap summergrid off hold off

输出图形如下: fig21

[例]绘制方向和速度矢量图:

wdir = [40 90 90 45 360 335 360 270 335 270 335 335]; knots = [5 6 8 6 3 9 6 8 9 10 14 12]; rdir = wdir * pi/180; [x,y] = pol2cart(rdir,knots); compass(x,y); text(-28,15,desc)

输出图形如下: fig22

[例]绘制火柴棍图:

t = linspace(-2*pi,2*pi,10); h = stem(t,cos(t),'fill','--'); set(get(h,'BaseLine'),'LineStyle',':') set(h,'MarkerFaceColor','red')

输出图形如下: fig23

[例]绘制复数函数图形:

t = 0:0.5:8; s = 0.04 + i; z = exp(-s*t); feather(z)

输出图形如下: fig24

[例]绘制二维动态: Movie:

for k = 1:10 plot (fft(eye(k+10))) axis equal M(k) = getframe; endmovie(M,5)

输出图形如下: fig25

注: 由于不可描述的原因,第五章部分详见同专栏下文章《MATLAB数学建模:数据图形可视化-三维绘图函数》。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有