一、瀑布图是什么?
瀑布图(Waterfall Plot)是一种特殊形式的三维网格图,它通过一系列沿某个轴排列的曲线来展示三维数据的走势。图中每条线看起来就像一层瀑布,因此得名。相较于传统的 mesh
图,瀑布图在前后维度上更有层次感,适合观察趋势随时间或位置的变化。
二、瀑布图的应用场景
瀑布图在以下几类问题中非常有用:
-
频谱分析:随时间变化的频谱强度展示(如语音信号或雷达信号)。
-
地形数据:不同截面的地形剖面线可视化。
-
金融分析:展示时间序列在多个维度的演变。
-
物理/工程建模:热场分布、应力场沿某维度的分布变化。
三、使用 MATLAB 绘制瀑布图
(一) 数据准备
clear; close all; clc;
% 创建二维坐标网格
[x, y] = meshgrid(-5:0.5:5, -5:0.5:5);
% 使用 peaks 函数生成 Z 值
z = peaks(x, y);
代码解释:
首先,clear; close all; clc;
命令用于清理工作区、关闭所有打开的图形窗口并清空命令行,以确保代码在干净的环境中运行。
接着,我们创建了二维网格:
-
meshgrid(-5:0.5:5, -5:0.5:5)
:生成x
和y
的二维网格坐标。x
和y
是由-5
到5
之间的数值组成的,步长为0.5
。这种方式可以生成等间距的坐标点,用于三维数据的绘制。 -
z = peaks(x, y)
:peaks
是 MATLAB 中一个内置函数,它会生成一个包含峰值和谷值的矩阵。在此示例中,z
对应于x
和y
的函数值,构成一个起伏的三维表面。
(二) 创建图形对象
figure('Position', [100, 100, 900, 600], 'Color', 'w');
代码解释:
在这一部分,我们使用 figure
函数创建了一个新的图形窗口,并对其进行了一些自定义设置:
-
'Position', [100, 100, 900, 600]
:设置图形窗口的位置和大小。[100, 100]
表示窗口左上角的位置,[900, 600]
表示窗口的宽度和高度(单位为像素)。 -
'Color', 'w'
:将图形窗口的背景色设置为白色。
这些设置确保图形窗口的大小和颜色符合我们的需求,并提供一个清晰的视觉效果。
(三) 绘制瀑布图
waterfall(x, y, z);
代码解释:
waterfall(x, y, z)
是用于绘制三维瀑布图的核心函数。它会生成一个三维图形,其中 x
和 y
表示横纵坐标,z
是对应的高度值。在此示例中,x
和 y
是二维网格坐标,而 z
则是通过 peaks
函数生成的表面数据。
瀑布图通过显示数据的逐层高度变化,使得数据的趋势和波动更加可视化。
(四) 美化图形
title('瀑布图', 'FontName', 'SimSun', 'FontSize', 14);
xlabel('X 轴', 'FontName', 'SimSun', 'FontSize', 12);
ylabel('Y 轴', 'FontName', 'SimSun', 'FontSize', 12);
zlabel('Z 值', 'FontName', 'SimSun', 'FontSize', 12);
grid on;
colormap('turbo');
shading interp;
view(-35, 45);
代码解释:
-
title('优化后的瀑布图 - Waterfall Plot')
:为图形添加标题,帮助用户理解图形的内容。 -
xlabel('X 轴', 'FontName', 'SimSun', 'FontSize', 12);
、ylabel('Y 轴', 'FontName', 'SimSun', 'FontSize', 12);
、zlabel('Z 值', 'FontName', 'SimSun', 'FontSize', 12)
:为 X 轴、Y 轴和 Z 轴的标签设置了宋体字体(SimSun
)以及适当的字体大小"12"。 -
grid on
:启用网格线,使得图形的结构更加清晰可见。 -
colormap('turbo')
:设置颜色映射为'turbo'
,提供一种鲜艳的颜色渐变效果,有助于增强视觉冲击力。 -
shading interp
:对图形进行插值平滑,去除显著的网格线,使图形表面更加平滑。 -
view(-35, 45)
:设置观察角度为 (-35, 45),让图形从更适合观察的角度显示,从而增强三维效果。
这些设置提升了图形的视觉效果,使得数据的展示更加清晰和美观。
(五) 添加光照效果
camlight('headlight');
lighting gouraud;
代码解释:
-
camlight('headlight')
:为图形添加头灯光源,模拟来自观察者方向的光照效果,从而增强图形的立体感。 -
lighting gouraud
:使用 Gouraud 光照模型,通过平滑处理每个三角形面的光照强度,使得图形的光照效果更加自然和细腻。
光照效果可以让图形看起来更加真实,突出其三维效果。
完整代码:
clear; close all; clc;
% 创建二维坐标网格
[x, y] = meshgrid(-5:0.5:5, -5:0.5:5);
% 使用 peaks 函数生成 Z 值
z = peaks(x, y);
figure('Position', [100, 100, 900, 600], 'Color', 'w');
waterfall(x, y, z);
title('瀑布图', 'FontName', 'SimSun', 'FontSize', 14);
xlabel('X 轴', 'FontName', 'SimSun', 'FontSize', 12);
ylabel('Y 轴', 'FontName', 'SimSun', 'FontSize', 12);
zlabel('Z 值', 'FontName', 'SimSun', 'FontSize', 12);
grid on;
colormap('turbo');
shading interp;
view(-35, 45);
camlight('headlight');
lighting gouraud;
实现瀑布图:
四、小结
在本示例中,我们使用 waterfall
函数创建了一个三维瀑布图,展示了通过 peaks
函数生成的起伏曲面。通过图形美化、颜色映射、平滑插值和光照效果的应用,使得图形更具视觉吸引力,并且帮助清晰地表达数据的变化趋势。