这篇文章主要和大家分享三个可以Matlab中更简便实现同步子图视角的技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
说来惭愧,在了解到这个更简单的方法之前,为了实现这个功能自己写了个工具函数,没发现有这么简单的实现方法,不过官网上的实现方法有点问题,我略微做出修改,这点会在之后被提到,以下给出实现子图同步旋转的三个例子:
实例一:双子图仅同步视角
实现这个功能依靠的是函数linkprop,看名字就是链接axes的某些属性,这里我们只需要链接两个坐标区域的'View'属性即可轻易实现同步视角:
% demo1.m
% @author: slandarer
[X,Y]=meshgrid(1:0.5:10,1:20);
Z=sin(X)+cos(Y);
% 坐标区域1绘图
ax1=subplot(1,2,1);
surf(X,Y,Z)
colormap(gca,summer)
% 坐标区域2绘图
ax2=subplot(1,2,2);
surf(X,Y,Z)
colormap(gca,winter)
% 只改变视角不改变轴范围
linkprop([ax1,ax2],{'View'}); 
实例二:同步视角及坐标轴范围
在链接'View'属性的同时,再把'XLim'、'YLim'、'ZLim'属性同步起来就好(代码显示不全可左右滑动):
% demo2.m
% @author: slandarer
[X,Y]=meshgrid(1:0.5:10,1:20);
Z=sin(X)+cos(Y);
% 坐标区域1绘图
ax1=subplot(1,2,1);
surf(X,Y,Z)
colormap(gca,summer)
% 坐标区域2绘图
ax2=subplot(1,2,2);
surf(X,Y,Z)
colormap(gca,winter)
% 只改变视角和轴范围
linkprop([ax1,ax2],{'View','XLim','YLim','ZLim'});
实例三:更多子图
通过sub2ind把子图矩阵存成一个子图行向量,然后继续调用linkprop函数即可(代码显示不全可左右滑动):
% demo3.m
% @author: slandarer
% 绘制6个图
M=2;
N=3;
for m=1:M
for n=1:N
ax(1,sub2ind([M,N],m,n))=subplot(M,N,n+(m-1)*N);
hold on;grid on
scatter3(rand([5,1]),rand([5,1]),rand([5,1]),'filled')
end
end
% 只改变视角不改变轴范围
linkprop(ax,{'View'});
注:MATHWORKS官网上给出的方案是通过链接'CameraPostition'及'CameraUpVector'两个属性实现的但是如果本身各个轴比例不相同就会出现下面的情况(因此还是直接设置'View'属性比较直接):

以上就是Matlab实现同步子图视角的方法详解的详细内容,更多关于Matlab同步子图视角的资料请关注编程学习网其它相关文章!
本文标题为:Matlab实现同步子图视角的方法详解
基础教程推荐
- C语言实现宾馆管理系统课程设计 2023-03-13
- [c语言-函数]不定量参数 2023-09-08
- C++实现ETW进行进程变动监控详解 2023-05-15
- C++实战之二进制数据处理与封装 2023-05-29
- C语言 详解字符串基础 2023-03-27
- 全面了解C语言 static 关键字 2023-03-26
- 带你深度走入C语言取整以及4种函数 2022-09-17
- [C语言]二叉搜索树 2023-09-07
- centos 7 vscode cmake 编译c++工程 2023-09-17
- C语言编程C++旋转字符操作串示例详解 2022-11-20
