我在尝试使用 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 文件中的一些图像
您可以考虑使用
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")