MATLAB 制作瀑布图:可视化三维数据

一、瀑布图是什么?

瀑布图(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):生成 xy 的二维网格坐标。xy 是由 -55 之间的数值组成的,步长为 0.5。这种方式可以生成等间距的坐标点,用于三维数据的绘制。

  • z = peaks(x, y)peaks 是 MATLAB 中一个内置函数,它会生成一个包含峰值和谷值的矩阵。在此示例中,z 对应于 xy 的函数值,构成一个起伏的三维表面。

(二) 创建图形对象

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) 是用于绘制三维瀑布图的核心函数。它会生成一个三维图形,其中 xy 表示横纵坐标,z 是对应的高度值。在此示例中,xy 是二维网格坐标,而 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 函数生成的起伏曲面。通过图形美化、颜色映射、平滑插值和光照效果的应用,使得图形更具视觉吸引力,并且帮助清晰地表达数据的变化趋势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值