当前位置:   article > 正文

MATLAB数学建模:数据图形可视化_据matlab学习内容自己做一个关于数据处理图型化展现界面,

据matlab学习内容自己做一个关于数据处理图型化展现界面,

数据图形可视化

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




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               %清除当前窗口所有可见图形对象, 并设置窗口属性值为默认. 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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])
  • 1
  • 2
  • 3
  • 4
  • 5
  1. x x x 的默认取值范围绘制函数图形.
  2. 按照 x x x 指定的取值范围绘制函数图形.
  3. 按默认取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.
  4. 按照指定的, x , y x,y x,y 的取值范围绘制 x = x ( t ) , y = y ( t ) x = x(t), y = y(t) x=x(t),y=y(t).函数图形.
  5. 按照 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)(3x)3

[解]

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

代码执行结果如下:
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])
>> 
  • 1
  • 2
  • 3
  • 4
  • 5

代码执行结果如下:
fig1


2.2 二元函数绘图

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

  1. 函数 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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 按照 x , y x,y x,y 默认取值范围绘制二元函数 f f f 的图形.
    2. 按照 domain 指定的取值范围绘制二元函数 f f f 的图形.
    3. 按照 参数 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) 的图形.
    4. 按照指定的取值范围[smin,smax,tmin,tmax] 绘制函数 f ( x , y ) f(x,y) f(x,y) 的图形.
      5.调用 ezmesh 绘制图形时, 同时绘制 n ∗ n n*n nn 的网格,默认 n = 60. n = 60. n=60.
    5. 调用 ezmesh 绘制图形时, 以指定区域的中心绘制图形.

[例]

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

[解]

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

代码执行如下:
fig2


  1. 函数 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=(x21.5x)ex2y2xy.

[解]

[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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

代码执行结果如下:
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 实现离散图形的绘制:

  1. 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')
  • 1
  • 2
  • 3
  • 4
  • 5

图形输出如下:
fig4


  1. stem(x,y,'option')

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


  1. 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')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出图形如下;
fig5

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

[例]

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

[解]

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

输出图形如下:
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');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

输出图形如下:
fig7


4. 二维绘图函数

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

4.1 二维绘图基本准备

  1. 准备数据

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

  2. 指定图形窗口和子图位置

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

  3. 绘制图形

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

  4. 设置坐标轴和图形注释

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

     title('图名')       %指定图名
     xlabel('x轴名')     %指定x轴名
     ylabel('y轴名')     %指定y轴名
     legend('指定图例')   %图例
     text(2,0.5,'函数')  %指定文字
     axis([xmin,xmax,ymin,ymax])     %设置坐标轴范围
     grid on             %绘制坐标分割线
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  5. 精细修饰图形
    我们可以利用对象或图形窗口的菜单和工具栏进行设置, 属性设定则需要使用图形句柄进行操作.

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


4.2 二维绘图基本命令

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

1. plot(X,'s')
2. plot(X,Y,'s')
3. plot(X1,Y1,'s1',X2,Y2,'s2',...)
  • 1
  • 2
  • 3
  1. X X X 是实向量时, 以向量元素的下标为其横坐标, 元素值为纵坐标绘制一连续曲线. X X X为实矩阵时, 按列绘制每列元素值对应其下标的曲线, 曲线数目等于 X X X 矩阵的列数. X X X 是复数矩阵时, 按列分别以元素实部和虚部为横, 纵坐标绘制多条曲线.
  2. 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 对应的元素为横, 纵坐标分别绘制曲线, 曲线数目等于矩阵的列数.
  3. 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])                 %控制数轴范围
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出图形如下:
fig8

[例]

采用模型:
x 2 a 2 + y 2 25 − a 2 = 1 \frac{x^{2}}{a^{2}} + \frac{y^{2}}{25-a^{2}} = 1 a2x2+25a2y2=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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

输出图形如下:
fig9


4.3 快速方程式绘图

MATLAB中的快速方程式绘图函数包括 fplotezplot.

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

     fplot('函数',[xmin,xmax])
    
    • 1
  2. ezplot
    该函数功能类似于 fplot, 但可以绘出显函数, 隐函数和参数式. 调用格式如下:

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

[例]

使用 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])
  • 1

输出图形如下:
fig10


4.4 特殊二维图形

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

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

4.4.1.1 极坐标系

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

polar(theta,rho,LineSpec)
  • 1

其中, 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.

  1. semilogx, semilogy

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


  1. 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)
    
    • 1
    • 2

    输出图形如下:
    fig12


4.4.1.3 柱坐标系和球坐标系

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

pol2cart 命令调用格式如下:

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

sph2cart 命令调用格式如下:

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

[例]

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出图形如下:
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)                         %绘制等高线
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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

输出图形如下:
fig14

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

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

输出图形如下:
fig15

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

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

输出图形如下:
fig16

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

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

输出图形如下:
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出图形如下:
fig18

[例]绘制误差条图:

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

输出图形如下:
fig19

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

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

输出图形如下:
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出图形如下:
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出图形如下:
fig22


[例]绘制火柴棍图:

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

输出图形如下:
fig23


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

t = 0:0.5:8;
s = 0.04 + i;
z = exp(-s*t);
feather(z)
  • 1
  • 2
  • 3
  • 4

输出图形如下:
fig24

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

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

输出图形如下:
fig25

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/115539
推荐阅读
相关标签
  

闽ICP备14008679号