首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab等表面图与子图一起使用时失去了三维。

Matlab等表面图与子图一起使用时失去了三维。
EN

Stack Overflow用户
提问于 2022-06-22 01:36:08
回答 1查看 68关注 0票数 2

我正试图和subplot一起绘制一堆isosurface图,我希望它们看起来是三维的,并且可以旋转。但是,我发现当我将subplotisosurface结合起来时,地块出现了2d,不能旋转。这是MRE:

代码语言:javascript
复制
[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

我怎样才能使它旋转?如果我只绘制了一个等深面,没有子图,那么它是三维的和可旋转的。如果我使用subplotsurf,我会得到4个旋转的三维曲面图。我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-22 08:13:40

正如这里解释的那样,subplot首先将图形分割成不同的区域,并在其中一个区域创建一个2d轴对象。

然后,当您在isosurface 调用子图之后,MATLAB会将isosurface映射到2d轴上。

surf的工作方式不同,因为它强制将绘制为3d轴对象的axis对象转换为3D轴对象。这些行为可以重新创建如下:

代码语言:javascript
复制
figure;
plot(1,1)
surf([1,2;1,2],[1,1;2,2],[1 1 ; 1 1]);

代码语言:javascript
复制
figure
plot(1,1)
isosurface(x,y,z,V,1e-4);

解决这一问题的方法是强制使用view(3)(加上重新添加camlight)将其转换为3d Axis对象:

代码语言:javascript
复制
[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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72708776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档