我有一个数据文件,其中包含变量 V 的 x、y、z 坐标
x y z V
0 0 0.500000000000000 3.91743717285931
0.0500000000000000 0 0.500000000000000 4.82593865902504
0.100000000000000 0 0.500000000000000 5.03874568425820
0.150000000000000 0 0.500000000000000 4.84015746128314
0.200000000000000 0 0.500000000000000 4.31320834211277
0.250000000000000 0 0.500000000000000 4.71007310928003
0.300000000000000 0 0.500000000000000 5.68353172300361
0.350000000000000 0 0.500000000000000 6.93907354201857
0.400000000000000 0 0.500000000000000 1.69713115593222
0.450000000000000 0 0.500000000000000 0
0.500000000000000 0 0.500000000000000 0
0.550000000000000 0 0.500000000000000 0
0.600000000000000 0 0.500000000000000 0.485840981213434
0.650000000000000 0 0.500000000000000 1.30265381445392
0.700000000000000 0 0.500000000000000 1.73892191516507
0.750000000000000 0 0.500000000000000 1.78720066586633
0.800000000000000 0 0.500000000000000 0.401158585618868
0.850000000000000 0 0.500000000000000 4.33700792828408
0.900000000000000 0 0.500000000000000 5.76388423361443
0.950000000000000 0 0.500000000000000 2.41835943394263
由于包含值的数据文件都在单独的列中,我正在尝试将整个 doamin 转换为单个 3d doamin。
input = importdata('lci_000210.dat',' ',3);
nx = 96;
ny = 96;
nz = 49;
x = input.data(:,1);
y = input.data(:,2);
z = input.data(:,3);
Lci = input.data(:,4);
L3d = reshape(Lci,[nx,ny,nz]);
x3d = reshape(x,[nx,ny,nz]);
y3d = reshape(y,[nx,ny,nz]);
z3d = reshape(z,[nx,ny,nz]);
[x3d,y3d,z3d,L3d] = flow;
xslice = 5;
yslice = 0;
zslice = 0;
slice(x,y,z,Lci,xslice,yslice,zslice);
view(25,20);
colormap jet
colorbar
然而,这不断抛出以下错误
V must be a 3-D array.
所以我真的不确定如何处理数据集,我真正想要的是在数据集的任何位置截取一个切片,但仍然显示 3d doamin。我附上了一张图片,显示了我希望切片的表示方式。我试过重新整形,但那不起作用,我已经完成了重新整形,因为数据在列中,重新整形将它变成了一个 3d 矩阵。
数据来自流体流动模拟
在图像中,它在 y=0 处显示了一个轮廓切片,但我希望它显示在任何 y 位置,因此可以看到切片是从完整的 3d 图片中获取的
问题似乎是您的 x3d 和 y3d 颠倒了。
slice(y3d,x3d,z3d,L3d,[],[],[0.1 0.3 0.5]);
ax=gca;
ax.Children(1).LineStyle='none';
ax.Children(2).LineStyle='none';
ax.Children(3).LineStyle='none';
view(25,20);
colormap jet
colorbar
对于轮廓,只需给它一个值来绘制轮廓。
figure(2);clf
contourslice(y3d,x3d,z3d,L3d,[],[],[0.1 0.3 0.5],[10 20]);
view(25,20);
对于轮廓图,我找到了一个不同的解决方案。不像其他两个那么简单。
zax = squeeze(z3d(1,1,:));
zvals=[2 13 24];
figure(1);clf;hold on
for ct = 1:length(zvals)
%plot the contour
contourf(L3d(:,:,zvals(ct)),[0 10 20]);
ax=gca;
ax.Children(1).XData=x3d(:,1,1); %set x axis
ax.Children(1).YData=y3d(1,:,1); %set y axis
ax.Children(1).ContourZLevel=zax(zvals(ct)); %put at correct z
end
view(25,20);colormap
感谢 Amro 的回答:在一个 3d 图形中绘制多个 2d 等高线图 [Matlab]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句