Matlab实现多子图同步调整视角

目录
  • DEMO1同时改变坐标范围和视角
  • DEMO2只同时改变视角
  • DEMO3更多子图
  • 工具函数完整代码

要解决的问题:我希望在旋转其中一个AXES的视角的同时,其他AXES跟着以相同视角旋转。

我曾经在出过一篇如何同步视角的文章,但是只是讲清楚了原理,并写出了编写方法,但每次要写都要编写代码属实麻烦,因此,我将主要部分封装成了函数,用的时候只需要在代码结尾加上一行引用一下函数就行!!

以下先讲解函数咋用,在最后给出函数完整代码:

DEMO1 同时改变坐标范围和视角

直接在代码最后面引用一下工具函数,加入一行:

SCR()

在调整某一坐标区域即可实现同时调整坐标范围和视角,实例代码如下:

% demo1.m
% @author: slandarer

[X,Y]=meshgrid(1:0.5:10,1:20);
Z=sin(X)+cos(Y);

% 坐标区域1绘图
subplot(1,2,1)
surf(X,Y,Z)
colormap(gca,summer)

% 坐标区域2绘图
subplot(1,2,2)
surf(X,Y,Z)
colormap(gca,winter)

% 应用坐标区域同步旋转函数
SCR()

DEMO2 只同时改变视角

因为有时候绘图的坐标范围着实不一样,想要只改变视角但是不改变坐标范围可以在最后加入:

SCR(‘ucLim’)

% demo2.m
% @author: slandarer

[X,Y]=meshgrid(1:0.5:10,1:20);
Z=sin(X)+cos(Y);

% 坐标区域1绘图
subplot(1,2,1)
surf(X,Y,Z)
colormap(gca,summer)

% 坐标区域2绘图
subplot(1,2,2)
surf(peaks)
colormap(gca,winter)

% 应用坐标区域同步旋转函数
% 只改变视角不改变轴范围
SCR('ucLim')

DEMO3 更多子图

不管多少子图后面那一行照常加就完事,是不是嘎嘎好用:

% demo3.m
% @author: slandarer

% 绘制6个图
M=2;
N=3;

for m=1:M
    for n=1: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

% 应用坐标区域同步旋转函数
% 只改变视角不改变轴范围
SCR('ucLim')

工具函数完整代码

function SCR(varargin)
%
% @author: slandarer
% @公众号: slandarer随笔
% @知乎  : hikari
% @CSDN  : slandarer
%
% 期待您的关注!!!

help SCR % 若不希望输出[作者信息],请删除这行

uchangeLim=false;
if nargin>0
    if ischar(varargin{1})&&strcmp(varargin{1},'ucLim')
        uchangeLim=true;fig=gcf;
    elseif strcmp(get(varargin{1},'type'),'figure' )
        fig=varargin{1};
    end
else
    fig=gcf;
end
if nargin>1&&ischar(varargin{1})&&strcmp(varargin{1},'ucLim')
    uchangeLim=true;
end

% 为axes编号
ch=fig.Children;
for i=1:length(ch)
    ch(i).UserData=i;
end
fig.CurrentAxes=ch(end);

isClicking=false;
set(fig,'WindowButtonDownFcn',@bt_down);  % 设置鼠标按下回调
set(fig,'WindowButtonUpFcn',@bt_up);      % 设置鼠标松开回调
set(fig,'WindowButtonMotionFcn',@bt_move);% 设置鼠标移动回调

function bt_down(~,~),isClicking=true;end % 鼠标按下回调
function bt_up(~,~),isClicking=false;end  % 鼠标松开回调
function bt_move(~,~)
    if isClicking
        tempAxes=fig.CurrentAxes; % 获取当前点击的axes
        tempAxes.UserData;
        for ii=1:length(ch) % 两个axes
            if ch(ii).UserData~=tempAxes.UserData
                ch(ii).View=tempAxes.View; % 让其他axes与被点击axes有相同视角
                if ~uchangeLim
                    ch(ii).XLim=tempAxes.XLim; % 有相同X轴坐标范围
                    ch(ii).YLim=tempAxes.YLim; % 有相同Y轴坐标范围
                    ch(ii).ZLim=tempAxes.ZLim; % 有相同Z轴坐标范围
                end
            end
        end
    end
end
end

以上就是Matlab实现多子图同步调整视角的详细内容,更多关于Matlab多子图调整视角的资料请关注我们其它相关文章!

(0)

相关推荐

  • Matlab绘制散点密度图的教程详解

    目录 效果 1工具函数完整代码 2参数说明 3使用方式 3.1散点赋色 3.2等高线图 3.3带直方图的散点图 3.4带直方图的等高线图 4使用方式扩展–与ggplot修饰器联动 效果 原理也很简单,通过matlab自带的ksdensity获得网格每一点密度,通过密度拟合曲面,再计算每个数据点对应的概率,并将概率映射到颜色即可为了怕大家找不到函数这次工具函数放到最前面 1工具函数完整代码 function [CData,h,XMesh,YMesh,ZMesh,colorList]=density

  • 利用Matlab绘制有趣图像的示例代码

    目录 1.随机樱花树 2.苹果绘制 3.南瓜绘制 4.一堆三角形绘制 5.月饼绘制 6.大钻石绘制 7.有趣曲线1 8.有趣曲线2 9.有趣曲线3——蝴蝶曲线 10.有趣曲线4——心形曲线 11.有趣曲线5 12.会害羞的含羞草 13.随机雪景 1.随机樱花树 function sakura % @author:slandarer % 随机形状二叉树樱花树绘制 hold on,axis equal axis(0.5+[-10,50,0,50]) set(gca,'xtick',[],'ytick

  • 详解Matlab如何绘制桑基图

    目录 详细用法 1使用示例 2输入参数 3输出 函数完整代码 使用示例代码 这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概是下面这样子: 先说明函数(sankey2)怎么用,函数完整代码放在博客最后 详细用法 1 使用示例 新建一个m文件,运行如下代码 List={'a1',1,'A'; 'a2',1,'A'; 'a3',1,'A'; 'a3',0.5,'C'; 'b1',1,'B'; 'b2',1,'B'; 'b3',1,'B'; 'c1',1,'C'; 'c2',1,'C'; 'c

  • 如何利用Matlab绘制出好看的火山图

    这里画了一个示例: 数据来源 绘制效果: 代码及说明: 使用代码时只需要改一开始导入的数据,和代码提示中X坐标区域范围和Y坐标区域范围,完整代码如下所示: % 读取数据 data=readmatrix('volcano.txt'); logFC=data(:,2); padj=data(:,3); DB_not=(padj>0.5)|(logFC<0.5&logFC>-0.5); DB_up=padj<=0.05&logFC>=0.5; DB_down=pad

  • Matlab绘制中国地图超全教程详解

    目录 各省边界线绘图 省份填色图 中国公路交通图 中国铁路交通图 中国河流图 组合美化图 美化图一 美化图二 依旧需要用到Mapping Toolbox不会安装的可以看我上一篇 虽然我们只读取shp文件,但需要保证文件夹里还有shx文件及dbf文件 各省边界线绘图 provinces=shaperead('bou2_4l.shp','UseGeoCoords',true); % 绘图 worldmap('China'); geoshow(provinces) 省份填色图 provinces=sh

  • 利用Matlab绘制地图的超详细教程

    目录 MappingToolbox工具箱安装 局部区域陆地绘制 映射贴图 纹理贴图 线路图绘制 usamap axesm 一些地图绘制可用简易函数 subplot tightmap 边框标签网格快速开关函数 colormap colorbar worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域,本文先在worldmap函数基础上讲解如何导入各种数据绘制各种类型图片,略提一下如何使用usamap,再讲解axesm的各种

  • Matlab实现多子图同步调整视角

    目录 DEMO1同时改变坐标范围和视角 DEMO2只同时改变视角 DEMO3更多子图 工具函数完整代码 要解决的问题:我希望在旋转其中一个AXES的视角的同时,其他AXES跟着以相同视角旋转. 我曾经在出过一篇如何同步视角的文章,但是只是讲清楚了原理,并写出了编写方法,但每次要写都要编写代码属实麻烦,因此,我将主要部分封装成了函数,用的时候只需要在代码结尾加上一行引用一下函数就行!! 以下先讲解函数咋用,在最后给出函数完整代码: DEMO1 同时改变坐标范围和视角 直接在代码最后面引用一下工具函

  • Matlab实现同步子图视角的方法详解

    目录 实例一:双子图仅同步视角 实例二:同步视角及坐标轴范围 实例三:更多子图 说来惭愧,在了解到这个更简单的方法之前,为了实现这个功能自己写了个工具函数,没发现有这么简单的实现方法,不过官网上的实现方法有点问题,我略微做出修改,这点会在之后被提到,以下给出实现子图同步旋转的三个例子: 实例一:双子图仅同步视角 实现这个功能依靠的是函数linkprop,看名字就是链接axes的某些属性,这里我们只需要链接两个坐标区域的'View'属性即可轻易实现同步视角: % demo1.m % @author

  • 基于Matlab制作伪3D第一视角迷宫小游戏

    目录 游戏效果 游戏原理说明 第一代程序计算交点方法 第二代程序计算交点方法 距离转换为线段长度 完整代码 游戏效果 使用键盘上方向键↑向前移动 使用键盘左右方向键调整← →朝向 游戏原理说明 原理很简单,如效果图所示,主要就是以角色视角方向发射大量的直线模拟视线,并计算直线与墙壁交点,获取每一条视线方向下,角色到墙壁的距离,然后根据近大远小的原理绘制不同长度的竖向直线模拟墙壁. 第一代程序计算交点方法 第一代程序是使用的polyshape对象(二维多边形对象)制作墙壁,polyshape对象重

  • python 含子图的gif生成时内存溢出的方法

    今天想用python做个demo,含两个子图的动态gif,代码如下: import matplotlib.pyplot as plt import imageio,os import matplotlib # plt.ion() fig=plt.figure(0) ax1=plt.subplot(121) ax2=plt.subplot(122) ax1.set_title('input') ax2.set_title('GT') for i in range(1000): img1=plt.i

  • MATLAB数学建模之画图汇总

    1. 二维数据曲线图 1.1 绘制二维曲线的基本函数 1.plot()函数 plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横.纵坐标的二维曲线. 例: t=0:0.1:2*pi; x=2 * t; y=t.*sin(t).*sin(t); plot(x, y); 2. 含多个输入参数的plot函数 plot函数可以包含若干组向量对,每一组可以绘制出一条曲线.含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,-,xn,

  • Matlab、Python为工具解析数据可视化之美

    在我们科研.工作中,将数据完美展现出来尤为重要. 数据可视化是以数据为视角,探索世界.我们真正想要的是 - 数据视觉,以数据为工具,以可视化为手段,目的是描述真实,探索世界. 下面介绍一些数据可视化的作品(包含部分代码),主要是地学领域,可迁移至其他学科. Example 1 :散点图.密度图(Python) import numpy as np import matplotlib.pyplot as plt # 创建随机数 n = 100000 x = np.random.randn(n) y

  • 使用数学软件Matlab建模画图程序汇总

    1. 二维数据曲线图 1.1 绘制二维曲线的基本函数 1.plot()函数 plot函数 用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横.纵坐标的二维曲线. 例: t=0:0.1:2*pi; x=2 * t; y=t.*sin(t).*sin(t); plot(x, y); 2.含多个输入参数的plot函数 plot函数可以包含若干组向量对,每一组可以绘制出一条曲线.含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,-,xn,

  • 基于Matlab实现BP神经网络交通标志识别

    目录 一.BP神经网络交通标志识别简介 二.部分源代码 三.运行结果 一.BP神经网络交通标志识别简介 道路交通标志用以禁止.警告.指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复杂, 且智能识别技术尚未成熟, 为了得到高效实用的道路标志识别系统, 仍需进行大量的研究.限速交通标志的检测识别作为道路交通标志识别系统的一个重要组成部分, 对它的研究具有非常重要的意义. 目前国内已有不少学者针对道路交通标志牌的智

  • 教你用Matlab制作立体动态相册

    目录 效果 教程部分 1图片导入与大小重设 2figaxes设置 3绘制图形句柄 4立方体旋转 5获取鼠标与中心点的距离 6鼠标移动到fig中心时更新图片 完整代码 效果 教程部分 1 图片导入与大小重设 需要有一个名为album的文件夹和当前m文件在同一文件夹,另外ablum文件夹内至少要有一张jpg格式图片 path='.\album\';%文件夹名称 files=dir(fullfile(path,'*.jpg')); picNum=size(files,1); %遍历路径下每一幅图像 f

随机推荐