Matlab中isosurface搭配subplot绘图时丢失3D效果无法旋转
问题说明
使用subplot排布多幅由isosurface生成的三维等值面图时,图形会呈现2D投影效果且无法旋转交互,不符合预期:
- 单独绘制单个
isosurface图形时,可正常显示3D效果、支持旋转 - 使用
subplot搭配surf绘制3D曲面时,也可正常生成4幅支持旋转的3D图
最小复现代码
[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创建的子坐标轴默认是2D视图模式,isosurface本身不会自动触发坐标轴切换到3D视图,而surf这类3D绘图函数会自动完成这个切换,所以只有isosurface+subplot的组合会出问题。
只需要在每个子图绘制完isosurface后,手动调用view(3)将坐标轴切换为3D视图即可恢复3D显示和旋转交互能力,可选添加光照优化显示效果,修正后代码如下:
[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); view(3); % 切换为默认3D视图,启用旋转交互 % 以下为可选优化项,提升3D显示效果 camlight; lighting gouraud; axis tight; end
补充说明
- 如果需要全局开启旋转交互,可在代码最后加一行
rotate3d on,正常情况下执行view(3)后已经支持鼠标拖拽旋转。 - 可以在
view(3)后传入方位角、俯仰角参数,自定义所有子图的初始观察角度。
内容的提问来源于stack exchange,提问作者sodiumnitrate
相关产品推荐
相关产品推荐

