基本上我想在Matlab中使用coneplot绘制3D矢量场。 我的脚本看起来像这样:
data=oommf2matlab('420x350x5-2_5-5.omf');
x=linspace(data.xmin,data.xmax,data.xnodes);
y=linspace(data.ymin,data.ymax,data.ynodes);
z=linspace(data.zmin,data.zmax,data.znodes);
[X,Y,Z]=meshgrid(y,x,z);
scale=4;
angle = data.datay ./ data.datax;
colors = angle;
figure;
coneplot(data.positionx,data.positiony,data.positionz,data.datax,data.datay,data.dataz,X,Y,Z,scale,colors);
oommf2matlab是一个将我的数据转换为matlab并返回如下结构的函数:
xmin: 0
ymin: 0
zmin: 0
xmax: 4.2400e-07
ymax: 3.5400e-07
zmax: 1.2500e-08
xnodes: 212
ynodes: 177
znodes: 5
datax: [212x177x5 double]
datay: [212x177x5 double]
dataz: [212x177x5 double]
positionx: [212x177x5 double]
positiony: [212x177x5 double]
positionz: [212x177x5 double]
运行此脚本会给我一个错误
使用interp3时出错(第146行)输入网格不是有效的MESHGRID。
coneplot中的错误(第144行)ui = interp3(x,y,z,u,cx,cy,cz,method);
omf2cone错误(第11行) coneplot(data.positionx,data.positiony,data.positionz,data.datax,data.datay,data.dataz,X,Y,Z,规模,颜色);
如果通过调试将错误追溯到MATLAB:griddedInterpolant:NdgridNotMeshgrid3DErrId错误,如下所示:
identifier:
'MATLAB:griddedInterpolant:NdgridNotMeshgrid3DErrId'
message:
Data is in MESHGRID format, NDGRID format is required.
Convert your data as follows:
P = [2 1 3];
X = permute(X, P);
Y = permute(Y, P);
Z = permute(Z, P);
V = permute(V, P);
F = griddedInterpolant(X,Y,Z,V)
cause: {0x1 cell}
stack: [3x1 struct]
这对我来说很奇怪,因为interp3已经完成了错误所暗示的修复。
此外,如果我让coneplot通过以下方式生成网格:
coneplot(data.datax,data.datay,data.dataz,X,Y,Z,scale,colors);
没有错误,但是没有创建任何情节,只有图的轴。
答案 0 :(得分:1)
而不是使用meshgrid
代替使用griddedInterpolant()
,以便您的数据采用错误中标识的格式。
您的错误的一部分也可能在[X,Y,Z]=meshgrid(y,x,z);
这一行,而您想要[X,Y,Z]=meshgrid(x,y,z);
?这可能会导致您描述的语法错误