logo

第 3 章 数据可视化

作者
Modified on
Reading time
6 分钟阅读:..评论:..

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

3.1 绘制基本图形

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

3.1.1 绘制二维图形

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

plot(X,Y)

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

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

上述代码绘制了正弦函数 sin(x)的图像。 除了 plot()函数,还可以使用 scatter()函数绘制二维散点图:

x = randn(1,100); y = randn(1,100); scatter(x,y)

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

3.1.2 绘制三维图形

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

t = 0:pi/50:10*pi; x = sin(t); y = cos(t); z = t; plot3(x,y,z)

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

x = randn(1,100); y = randn(1,100); z = randn(1,100); scatter3(x,y,z)

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

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

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

3.1.3 多图形绘制

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

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

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

3.2 图形的修饰与标注

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

3.2.1 添加标题和标签

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

x = 0:pi/100:2*pi; y = sin(x); plot(x,y) title('sin(x) Function') xlabel('x') ylabel('sin(x)')

3.2.2 修改图形属性

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

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

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

3.2.3 添加图例

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

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

3.3 三维图形

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

3.3.1 绘制三维曲线

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

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

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

3.3.2 三维表面图

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

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

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

3.3.3 三维散点图

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

x = randn(1,1000); y = randn(1,1000); z = randn(1,1000); scatter3(x,y,z,20,z,'filled') view(-30,10)

scatter3()函数的前三个参数指定点的坐标,第四个参数指定散点大小,第五个参数指定散点颜色,z 表示使用 z 值映射颜色。'filled'表示填充散点。 view(-30,10)函数用于设置三维视角,便于从更好的角度观察数据。

3.4 动态可视化

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

3.4.1 动画的创建

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

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

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

3.4.2 动态数据展示

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

x = 1:100; y = rand(1,100); h = plot(x,y); xlim([1,100]) ylim([0,1]) for k = 101:200 y(k-100) = []; y = [y rand]; set(h,'XData',x,'YData',y) pause(0.05) end

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

3.4.3 实时数据可视化

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

x = 1:100; y = rand(1,100); h = animatedline; axis([1,100,0,1]) for k = 1:length(x) addpoints(h,x(k),y(k)) drawnow pause(0.05) end

animatedline()函数创建一个句柄对象,addpoints()函数每次向其中添加一个数据点,drawnow 更新图形窗口。 以上就是 MATLAB 数据可视化的主要内容。通过本章的学习,相信你已经初步掌握了 MATLAB 强大的可视化功能。熟练运用这些绘图函数,可以将枯燥的数据转化为生动直观的图形,更好地分析问题、展示结果。 在实际应用中,你还会遇到更多个性化的可视化需求,希望你能举一反三,灵活运用所学的知识,创造出更多精彩纷呈的可视化作品。数据可视化是一个充满想象力和创意的领域,期待你的进一步探索! 思考题:

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

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