keywords: MATLAB 可视化, 绘图函数, 图形修饰, 动态可视化
数据可视化是将数据转化为图形或图像的过程,使得复杂的数据更易于理解和分析。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 指定当前子图所在的位置。上述代码在一个图窗中绘制了正弦、余弦、正切和正割函数的图像。
下图展示了绘制的多图形效果:
graph LR
A[sin] --> B[cos]
A --> C[tan]
B --> D[sec]
style A fill:#f9f,stroke:#333,stroke-width:4px
style B fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
style C fill:#f9f,stroke:#333,stroke-width:4px
style D fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
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 强大的可视化功能。熟练运用这些绘图函数,可以将枯燥的数据转化为生动直观的图形,更好地分析问题、展示结果。
在实际应用中,你还会遇到更多个性化的可视化需求,希望你能举一反三,灵活运用所学的知识,创造出更多精彩纷呈的可视化作品。数据可视化是一个充满想象力和创意的领域,期待你的进一步探索!
思考题:
- 在绘制三维散点图时,如何让散点大小和颜色同时表现数据特征?
- 如何创建一个散点图动画,让散点随机漂浮并且颜色渐变?
欢迎你在评论区讨论自己的思路或解法,我会抽空予以点评。编程学习的过程就是一个不断思考、尝试、总结、提高的过程,多思考多动手,你一定会有更大的收获。