MATLAB中z维度不同的x,y,z数据曲面绘制问题
MATLAB中维度不匹配的x/y/z数据能否用surf()或plot3()绘制?
给定数据代码
M = 1000; % [seconds] D = 50; % number of masses t = [0:dt:M]; y = randn(length(t),1); % [unitless] amplitude z = [1:1:2*D]; % [unitless] number of eigenfrequencies data = [t,y,z];
问题描述
希望绘制曲面图,x轴为时间t,y轴为振幅y,z轴为特征频率序号z。其中x和y的维度与t一致,但z的维度为1×100(即长度为2*D),与x/y维度不匹配,询问能否在MATLAB中使用surf()或plot3()绘制这类数据。
编辑说明:此问题表述欠佳,实际这类维度不同的x,y,z数据根本无法绘制。
回答
不能直接用surf()或plot3()绘制这类维度不匹配的数据,原因如下:
surf()要求输入的X、Y、Z必须是同维度的矩阵(若X/Y为向量,MATLAB会自动扩展为网格矩阵,但Z必须对应匹配的矩阵)。你的t和y是长度为N的向量,z是长度为100的向量,三者维度完全不兼容,无法构成曲面所需的网格数据。plot3()用于绘制3D曲线或散点时,要求三个变量为同长度的向量(单条曲线)或多组同长度向量(多条曲线),你的z与t/y长度不匹配,无法一一对应每个(t,y)点到z值。
如果要可视化这类数据,需先根据数据逻辑构造匹配维度的网格。比如,若想展示每个特征频率序号z下时间t和振幅y的分布,可按以下方式处理:
% 构造匹配维度的网格数据 [T, Z] = meshgrid(t, z); Y = repmat(y', length(z), 1); % 将y扩展为与T、Z同维度的矩阵 % 绘制曲面图 surf(T, Y, Z); xlabel('时间 t (秒)'); ylabel('振幅 y'); zlabel('特征频率序号 z');
处理后,T、Y、Z均为100×N的矩阵,满足surf()的输入要求。
内容的提问来源于stack exchange,提问作者Jonathan Frutschy
相关产品推荐
相关产品推荐

