绘制 3D 曲面图

问题描述 投票:0回答:1

我在尝试使用 surf 函数在 MATLAB 中生成 3D 曲面图时遇到问题。我遇到的错误消息是“Z 必须是矩阵,而不是标量或向量。”

MATLAB 脚本涉及从 MAT 文件加载数据。此 MAT 文件中包含 1x2000 设计的列表,所有设计都有自己的特定数据列表。

在 3D 曲面图中,每个点 (X, Y) 对应于由 Z 值确定的高度,但除了 3D 散点图之外,我还可以做些什么来绘制 3D 曲面图吗?

对此问题的任何见解或建议将不胜感激。

我尝试在 X 和 Y 向量上使用网格网格,然后使用 griddata 归因 Z 值,然后冲浪,但我没有从中得到任何东西。

这是参考代码。

% Load data from MAT files
dataStruct = load('optimised.mat'); 
ValDesign = dataStruct.valid;  % Get inside the structure

% Number of valid design
[Num_row, Num_col] = size(ValDesign);

% Initialize matrix to store value
MassLoad_1 = zeros(1,Num_col);
MassLoad_2 = zeros(1,Num_col);
TotalMass = zeros(1,Num_col);

% Extract data from each aircraft
for i=1:Num_row
    for j=1:Num_col

        currentAircraft = ValDesign(i, j);
        MassLoop(j) = currentAircraft.mass; % Extract the desired variables

        % Get inside the structure
        PayLoadStruct(j) = ValDesign(i,j).payload;
        mis2_data(j) = PayLoadStruct(j).mass2; % Extract the desired variables
        mis3_data(j) = PayLoadStruct(j).mass3; % Extract the desired variables

        % Store values into a matrix
        MassLoad_1(i,j)= mis2_data(j);
        MassLoad_2(i,j)= mis3_data(j);
        TotalMass(i,j)= MassLoop(j);

    end
end

[MassLoad1_grid, MassLoad2_grid]= meshgrid(MassLoad_1,MassLoad_2);
surf(MassLoad1_grid,MassLoad2_grid,TotalMass);

图1是MAT文件的结构,它包含1x2000设计的列表。图 2 在其中一个设计中,我尝试绘制总质量以及有效载荷内的其他两个质量。

这是我的 MAT 文件中的一些图像

Picture 1

Picture 2

matlab matrix 3d visualization data-analysis
1个回答
0
投票

您可以考虑使用

griddata
来插值 2-D 或 3-D 离散数据。 例如,假设您的积分是
x,y,z

xrange=linspace(min(x),max(x));
yrange=linspace(min(y),max(y));

[xq,yq] = meshgrid(xrange, yrange);
zq = griddata(x,y,z,xq,yq);

 mesh(xq,yq,zq)
 hold on
 plot3(x,y,z,"o")
© www.soinside.com 2019 - 2024. All rights reserved.