keywords: MATLAB 可视化, 绘图函数, 图形修饰, 动态可视化


数据可视化是将数据转化为图形或图像的过程,使得复杂的数据更易于理解和分析。MATLAB 提供了丰富的可视化工具,可以轻松创建出专业、美观的图形。本章将介绍如何使用 MATLAB 进行各种类型的数据可视化。

3.1 绘制基本图形

MATLAB 提供了一系列绘图函数,可以方便地绘制出二维、三维等各种类型的图形。下面介绍几种常用的基本绘图函数。

3.1.1 绘制二维图形

使用 plot()函数可以绘制二维线图,语法格式为:

  1. plot(X,Y)

其中,X 和 Y 为数据向量,分别表示数据点的横坐标和纵坐标。例如:

  1. x = 0:pi/100:2*pi;
  2. y = sin(x);
  3. plot(x,y)

上述代码绘制了正弦函数 sin(x)的图像。

除了 plot()函数,还可以使用 scatter()函数绘制二维散点图:

  1. x = randn(1,100);
  2. y = randn(1,100);
  3. scatter(x,y)

这里使用 randn()函数生成服从标准正态分布的随机数据。

3.1.2 绘制三维图形

对于三维数据,可以使用 plot3()函数绘制三维线图:

  1. t = 0:pi/50:10*pi;
  2. x = sin(t);
  3. y = cos(t);
  4. z = t;
  5. plot3(x,y,z)

类似地,scatter3()函数可以绘制三维散点图:

  1. x = randn(1,100);
  2. y = randn(1,100);
  3. z = randn(1,100);
  4. scatter3(x,y,z)

还可以使用 surf()函数绘制三维曲面:

  1. [X,Y] = meshgrid(-2:.2:2);
  2. Z = X.*exp(-X.^2 - Y.^2);
  3. surf(X,Y,Z)

其中 meshgrid()函数用于生成二维网格数据。

3.1.3 多图形绘制

有时我们需要在一个图窗中绘制多个图形,可以使用 subplot()函数实现。例如:

  1. x = 0:pi/100:2*pi;
  2. subplot(2,2,1); plot(x,sin(x))
  3. subplot(2,2,2); plot(x,cos(x))
  4. subplot(2,2,3); plot(x,tan(x))
  5. subplot(2,2,4); plot(x,sec(x))

subplot(m,n,p)表示将图窗分割成 m 行 n 列,p 指定当前子图所在的位置。上述代码在一个图窗中绘制了正弦、余弦、正切和正割函数的图像。

下图展示了绘制的多图形效果:

  1. graph LR
  2. A[sin] --> B[cos]
  3. A --> C[tan]
  4. B --> D[sec]
  5. style A fill:#f9f,stroke:#333,stroke-width:4px
  6. style B fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
  7. style C fill:#f9f,stroke:#333,stroke-width:4px
  8. style D fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff

3.2 图形的修饰与标注

为了让图形更美观、专业,通常需要对图形进行必要的修饰,如添加标题、坐标轴标签、图例等。MATLAB 提供了一系列图形修饰函数。

3.2.1 添加标题和标签

使用 title()、xlabel()和 ylabel()函数可以分别添加图形标题、x 轴和 y 轴的标签文字,例如:

  1. x = 0:pi/100:2*pi;
  2. y = sin(x);
  3. plot(x,y)
  4. title('sin(x) Function')
  5. xlabel('x')
  6. ylabel('sin(x)')

3.2.2 修改图形属性

可以使用 set()函数修改图形的各种属性,如线条颜色、标记、线型等。例如:

  1. x = 0:pi/100:2*pi;
  2. y1 = sin(x);
  3. y2 = cos(x);
  4. plot(x,y1,'r',x,y2,'g--')
  5. set(gca,'XLim',[0 2*pi])

这里’r’表示红色实线,g—‘表示绿色虚线。set(gca,’XLim’,[0 2*pi])用于设置 x 轴的显示范围。

3.2.3 添加图例

对于包含多条曲线的图形,使用 legend()函数可以添加图例说明,例如:

  1. x = 0:pi/100:2*pi;
  2. y1 = sin(x);
  3. y2 = cos(x);
  4. plot(x,y1,'r',x,y2,'g--')
  5. legend('sin','cos')

3.3 三维图形

MATLAB 强大的三维绘图功能,可以绘制出非常炫酷的立体图形,下面介绍几种常见的三维图形。

3.3.1 绘制三维曲线

前面已经介绍过 plot3()函数,它可以绘制三维曲线。再看一个例子:

  1. t = 0:pi/50:10*pi;
  2. x = sin(t);
  3. y = cos(t);
  4. z = t./10;
  5. plot3(x,y,z,'r','LineWidth',2)
  6. grid on

这里同时展示了如何修改线条粗细,以及添加三维网格。

3.3.2 三维表面图

使用 surf()函数可以绘制三维曲面,配合 shading 功能可以渲染出丰富的色彩效果,例如:

  1. [X,Y] = meshgrid(-3:.2:3);
  2. Z = peaks(X,Y);
  3. surf(X,Y,Z)
  4. shading interp
  5. colormap hot

peaks()函数可以生成有趣的三维曲面数据。shading interp 表示插值着色,colormap hot 设置配色方案为热度图。

3.3.3 三维散点图

scatter3()函数前面已有介绍,这里再举一个例子:

  1. x = randn(1,1000);
  2. y = randn(1,1000);
  3. z = randn(1,1000);
  4. scatter3(x,y,z,20,z,'filled')
  5. view(-30,10)

scatter3()函数的前三个参数指定点的坐标,第四个参数指定散点大小,第五个参数指定散点颜色,z 表示使用 z 值映射颜色。’filled’表示填充散点。

view(-30,10)函数用于设置三维视角,便于从更好的角度观察数据。

3.4 动态可视化

除了静态图形,MATLAB 还支持动态可视化,可以生成动画效果,直观展现数据的动态变化过程。

3.4.1 动画的创建

最简单的创建动画的方式是使用 for 循环,例如:

  1. x = linspace(-8,8,100);
  2. for a = 1:0.5:5
  3. y = sin(a*x);
  4. plot(x,y)
  5. pause(0.1)
  6. end

上述代码绘制了 sin(ax)函数图像随参数 a 变化的动态过程。pause(0.1)表示每次绘图后暂停 0.1 秒。

3.4.2 动态数据展示

对于随时间变化的数据,可以使用 set()函数动态更新图形数据,例如:

  1. x = 1:100;
  2. y = rand(1,100);
  3. h = plot(x,y);
  4. xlim([1,100])
  5. ylim([0,1])
  6. for k = 101:200
  7. y(k-100) = [];
  8. y = [y rand];
  9. set(h,'XData',x,'YData',y)
  10. pause(0.05)
  11. end

上述代码模拟了一个随机数据流动态更新的过程。注意看 set()函数的用法。

3.4.3 实时数据可视化

对于实时采集的数据,可以使用 animatedline()函数动态添加数据点,例如:

  1. x = 1:100;
  2. y = rand(1,100);
  3. h = animatedline;
  4. axis([1,100,0,1])
  5. for k = 1:length(x)
  6. addpoints(h,x(k),y(k))
  7. drawnow
  8. pause(0.05)
  9. end

animatedline()函数创建一个句柄对象,addpoints()函数每次向其中添加一个数据点,drawnow 更新图形窗口。

以上就是 MATLAB 数据可视化的主要内容。通过本章的学习,相信你已经初步掌握了 MATLAB 强大的可视化功能。熟练运用这些绘图函数,可以将枯燥的数据转化为生动直观的图形,更好地分析问题、展示结果。

在实际应用中,你还会遇到更多个性化的可视化需求,希望你能举一反三,灵活运用所学的知识,创造出更多精彩纷呈的可视化作品。数据可视化是一个充满想象力和创意的领域,期待你的进一步探索!

思考题:

  1. 在绘制三维散点图时,如何让散点大小和颜色同时表现数据特征?
  2. 如何创建一个散点图动画,让散点随机漂浮并且颜色渐变?

欢迎你在评论区讨论自己的思路或解法,我会抽空予以点评。编程学习的过程就是一个不断思考、尝试、总结、提高的过程,多思考多动手,你一定会有更大的收获。