我正试图和subplot一起绘制一堆isosurface图,我希望它们看起来是三维的,并且可以旋转。但是,我发现当我将subplot和isosurface结合起来时,地块出现了2d,不能旋转。这是MRE:
[x,y,z] = meshgrid([-3:0.25:3]);
V = x.*exp(-x.^2 -y.^2 -z.^2);
for i=1:4
subplot(2,2,i);
isosurface(x,y,z,V,1e-4);
end我怎样才能使它旋转?如果我只绘制了一个等深面,没有子图,那么它是三维的和可旋转的。如果我使用subplot和surf,我会得到4个旋转的三维曲面图。我在这里错过了什么?
发布于 2022-06-22 08:13:40
正如这里解释的那样,subplot首先将图形分割成不同的区域,并在其中一个区域创建一个2d轴对象。
然后,当您在isosurface 调用子图之后,MATLAB会将isosurface映射到2d轴上。
surf的工作方式不同,因为它强制将绘制为3d轴对象的axis对象转换为3D轴对象。这些行为可以重新创建如下:
figure;
plot(1,1)
surf([1,2;1,2],[1,1;2,2],[1 1 ; 1 1]);

figure
plot(1,1)
isosurface(x,y,z,V,1e-4);

解决这一问题的方法是强制使用view(3)(加上重新添加camlight)将其转换为3d Axis对象:
[x,y,z] = meshgrid([-3:0.25:3]);
V = x.*exp(-x.^2 -y.^2 -z.^2);
figure;
for ii = 1:4
subplot(2,2,ii);
isosurface(x,y,z,V,1e-4);
view(3)
camlight;
end

https://stackoverflow.com/questions/72708776
复制相似问题