【matlab】绘图插入并放大/缩小子图

参考链接

代码分为两个:绘图代码与magnify.m

绘图代码就是普通的绘图代码,以下为例

%https://zhuanlan.zhihu.com/p/655767542
clc
clear
close all
x = 0:pi/100:2*pi;
y1 = sin(x);
plot(x,y1,'r-o');
hold on
y2=sin(x)-0.05;
y3=sin(x)+0.05;
xlim([0 2*pi]);
ylim([-1.5 1.5]);
plot(x,y2,'b-v');
plot(x,y3,'m-.');
legend('线型1','线型2','线型3','Location','northeast')

运行该m文件后运行magnify.m(magnify.m与绘图代码放在同一文件夹下)
magnify.m

%https://zhuanlan.zhihu.com/p/655767542
function magnify(f1)
warning off
%
%magnify(f1)
%
%  Figure creates a magnification box when under the mouse
%  position when a button is pressed.  Press '+'/'-' while
%  button pressed to increase/decrease magnification. Press
%  '>'/'<' while button pressed to increase/decrease box size.
%  Hold 'Ctrl' while clicking to leave magnification on figure.
%
%  Example:
%     plot(1:100,randn(1,100),(1:300)/3,rand(1,300)), grid on,
%     magnify;% Rick Hindman - 7/29/04if (nargin == 0), f1 = gcf; end;
set(f1, ...'WindowButtonDownFcn',  @ButtonDownCallback, ...'WindowButtonUpFcn', @ButtonUpCallback, ...'WindowButtonMotionFcn', @ButtonMotionCallback, ...'KeyPressFcn', @KeyPressCallback);
return;function ButtonDownCallback(src,eventdata)f1 = src;a1 = get(f1,'CurrentAxes');a2 = copyobj(a1,f1);set(f1, ...'UserData',[f1,a1,a2], ...'Pointer','fullcrosshair', ...'CurrentAxes',a2);set(a2, ...'UserData',[2,0.2], ...  %magnification, frame size'Color',get(a1,'Color'), ...'Box','on');xlabel(''); ylabel(''); zlabel(''); title('');set(get(a2,'Children'), ...'LineWidth', 2);set(a1, ...'Color',get(a1,'Color')*0.95);set(f1, ...'CurrentAxes',a1);ButtonMotionCallback(src);
return;function ButtonUpCallback(src,eventdata)H = get(src,'UserData');f1 = H(1); a1 = H(2); a2 = H(3);set(a1, ...'Color',get(a2,'Color'));set(f1, ...'UserData',[], ...'Pointer','arrow', ...'CurrentAxes',a1);if ~strcmp(get(f1,'SelectionType'),'alt'),delete(a2);end;
return;function ButtonMotionCallback(src,eventdata)H = get(src,'UserData');if ~isempty(H)f1 = H(1); a1 = H(2); a2 = H(3);a2_param = get(a2,'UserData');f_pos = get(f1,'Position');a1_pos = get(a1,'Position');[f_cp, a1_cp] = pointer2d(f1,a1);set(a2,'Position',[(f_cp./f_pos(3:4)) 0 0]+a2_param(2)*a1_pos(3)*[-1 -1 2 2]);a2_pos = get(a2,'Position');set(a2,'XLim',a1_cp(1)+(1/a2_param(1))*(a2_pos(3)/a1_pos(3))*diff(get(a1,'XLim'))*[-0.5 0.5]);set(a2,'YLim',a1_cp(2)+(1/a2_param(1))*(a2_pos(4)/a1_pos(4))*diff(get(a1,'YLim'))*[-0.5 0.5]);end;
return;function KeyPressCallback(src,eventdata)H = get(gcf,'UserData');if ~isempty(H)f1 = H(1); a1 = H(2); a2 = H(3);a2_param = get(a2,'UserData');if (strcmp(get(f1,'CurrentCharacter'),'+') | strcmp(get(f1,'CurrentCharacter'),'='))a2_param(1) = a2_param(1)*1.2;elseif (strcmp(get(f1,'CurrentCharacter'),'-') | strcmp(get(f1,'CurrentCharacter'),'_'))a2_param(1) = a2_param(1)/1.2;elseif (strcmp(get(f1,'CurrentCharacter'),'<') | strcmp(get(f1,'CurrentCharacter'),','))a2_param(2) = a2_param(2)/1.2;elseif (strcmp(get(f1,'CurrentCharacter'),'>') | strcmp(get(f1,'CurrentCharacter'),'.'))a2_param(2) = a2_param(2)*1.2;end;set(a2,'UserData',a2_param);ButtonMotionCallback(src);end;
return;% Included for completeness (usually in own file)
function [fig_pointer_pos, axes_pointer_val] = pointer2d(fig_hndl,axes_hndl)
%
%pointer2d(fig_hndl,axes_hndl)
%
%  Returns the coordinates of the pointer (in pixels)
%  in the desired figure (fig_hndl) and the coordinates
%       in the desired axis (axes coordinates)
%
% Example:
%  figure(1),
%  hold on,
%  for i = 1:1000,
%     [figp,axp]=pointer2d;
%     plot(axp(1),axp(2),'.','EraseMode','none');
%     drawnow;
%  end;
%  hold off% Rick Hindman - 4/18/01if (nargin == 0), fig_hndl = gcf; axes_hndl = gca; end;
if (nargin == 1), axes_hndl = get(fig_hndl,'CurrentAxes'); end;set(fig_hndl,'Units','pixels');pointer_pos = get(0,'PointerLocation');  %pixels {0,0} lower left
fig_pos = get(fig_hndl,'Position');  %pixels {l,b,w,h}fig_pointer_pos = pointer_pos - fig_pos([1,2]);
set(fig_hndl,'CurrentPoint',fig_pointer_pos);if (isempty(axes_hndl)),axes_pointer_val = [];
elseif (nargout == 2),axes_pointer_line = get(axes_hndl,'CurrentPoint');axes_pointer_val = sum(axes_pointer_line)/2;
end

运行后直接在原figure框中右键需要放大的地方即可弹出子图
此时按住邮件不放并按住Ctrl键和+键/-键可放大/缩小子图
在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#关键字概览

C#是一种面向对象的编程语言&#xff0c;由微软开发并作为.NET框架的一部分。它具有丰富的关键字&#xff0c;用于定义程序的结构和行为。本文将详细介绍C#中的关键字&#xff0c;包括基本关键字、上下文关键字以及它们在C#编程中的使用方式。 访问修饰符 访问修饰符控制成员…

Python变量age:深入探索其内涵与运用

Python变量age&#xff1a;深入探索其内涵与运用 在Python的世界里&#xff0c;变量age不仅是一个简单的标识符&#xff0c;它更是一个承载着丰富信息和功能的实体。今天&#xff0c;我们就来深入探索这个看似简单的age变量&#xff0c;揭示其背后的奥秘和魅力。 四个方面&am…

供应SKYA21001思佳讯芯片现货

长期供应各进口品牌芯片现货&#xff1a; SKYA21001 QM11024TR13 QM12113TR13 QM42391 QM45392 QM28005 RF8020TR13 QM77033DTR13 QM56021TR13-5K 885171 QM77043 QM78207 QM77038TR13 SKY58081-11 QPF5752QTR13-5K RF7198TR13-5K SKY58255-11 SKY85720-11 …

Ubuntu中安装和配置SSH的完全指南

目录 前言 第1步&#xff1a;安装SSH服务器 第2步&#xff1a;检查防火墙设置 第3步&#xff1a;连接到SSH服务器 第4步&#xff1a;配置SSH服务器&#xff08;可选&#xff09; 更改SSH端口 禁用root登录 第5步&#xff1a;公钥认证&#xff08;建议&#xff09; 结论…

XSS Challenges 闯关游戏环境准备:深入指南

在网络安全领域&#xff0c;理解并掌握跨站脚本攻击&#xff08;XSS&#xff09;的防御技巧至关重要。为了帮助学习者深入实践XSS攻击与防御&#xff0c;“XSS Challenges” 闯关游戏提供了一个实操平台。本文将详细介绍如何准备这一环境。 1. 环境准备概述 XSS Challenges 闯…

Kubernetes 之 Secret

Kubernetes 之 Secret Secret 的定义 Secret 解决了密码、token、秘钥等敏感数据的配置问题&#xff0c;它避免了把这些敏感数据直接暴露在镜像或者 Pod 的配置文件中。但是它只是一种相对安全的策略&#xff0c;我们还是可以在容器内找到这些信息。 Secret 的认证方式 认证…

eclipse-向Console控制台输出信息

首先这里主要用到的是org.eclipse.ui.console这个包&#xff0c;所以现在顺道先来了解一下&#xff1a; org.eclipse.ui.console是一个可扩展的console视图插件&#xff0c;利用它可以实现各种console&#xff0c;并把它们显示出来。该插件本身就实现了一个Message Console&…

本地 Java API 访问云上 HDFS 集群的问题与解决

前言 这篇文章默认是已经在云上配置好了 Haoop 集群&#xff0c;因此本文主要是记录一些可能会出现错误的地方。 如果还不会配置 Hadoop 集群&#xff0c;那么可以参考本专栏的另一篇文章&#xff1a;云上配置 Hadoop 集群详解 另外在进行本文的学习之前也建议先看看该文章&…

边缘计算的AI小板——OrangePi AI Pro

简介 OrangePi AI Pro是一款基于Allwinner H6处理器的嵌入式AI计算设备&#xff0c;适用于物联网和边缘计算。它具有强大的性能、低功耗、多接口和小尺寸。 本文分为三个部分&#xff1a; 一、对该板进行简单的开箱介绍。 二、 将SD卡中的系统迁移到由于该板支持SD卡、SSD…

必看——怎么让网站实现HTTPS访问?

让网站实现HTTPS访问的步骤可以简化为以下几个基本步骤&#xff0c;非常适合非技术背景人士理解&#xff1a; 1. 申请SSL证书&#xff1a; - SSL证书是实现HTTPS的关键&#xff0c;它能加密网站数据&#xff0c;保证用户信息的安全。你可以从一些提供免费SSL证书的机构&#xf…

Spring boot集成mybatis

Spring boot集成mybatis maven依赖 我的spring boot版本是2.5.0&#xff0c;集成mybatis&#xff0c;首先需要数据库的支持&#xff0c;这里我选择mysql数据库&#xff0c;版本是8.0.11&#xff0c;然后使用druid连接池&#xff0c;其次就需要加上mybatis的依赖。 <!--mys…

[ue5]建模场景学习笔记(2)——用vectornoise降低重复率

1.问题分析&#xff1a; 利用改uv的方式降低重复率并不理想&#xff0c;在一定程度上的确能够达到降低重复率的效果&#xff0c;但远看仍然有较清晰的重复效果&#xff0c;尝试优化一下。 2.操作实现&#xff1a; 1.首先先看一下修改后的效果&#xff1a; 这是未修改前&#…

centos打包离线phtone3安装包rpm

在有网络的环境中&#xff0c;下载Python3的RPM包及其所有依赖。 打包离线phtone3安装包centos7rmp # 安装 yum-utils&#xff0c;这个包包含了 yumdownloader yum install yum-utils # 创建一个目录来保存下载的RPM包 mkdir python3-rpms # 下载Python3及其所有依赖 yu…

「前端+鸿蒙」核心技术HTML5+CSS3(八)

1、网站布局详解 网站布局是前端开发中的核心概念之一,它决定了网页的视觉结构和用户浏览的逻辑顺序。以下是几种常见的布局方式及其代码示例: 固定布局: 固定布局通常具有固定的宽度和高度,适用于传统的桌面视图。 <!DOCTYPE html> <html> <head><…

【Web API DOM02】如何获取、操作DOM元素

一&#xff1a;获取DOM元素 1 根据CSS选择器获取 语法格式如下&#xff1a; &#xff08;1&#xff09;选中一个DOM元素 document.querySeletor(CSS选择器) <ul><li>1</li><li>2</li><li>3</li> </ul> document.querySel…

Github上一款开源、简洁、强大的任务管理工具:Condution

Condution 是一款开源任务管理工具&#xff0c;它以简洁易用、功能强大著称。它旨在为用户提供一个简单高效的平台&#xff0c;帮助他们管理日常任务、提高工作效率。 1. Condution 的诞生背景 现如今&#xff0c;市面上存在着许多任务管理软件&#xff0c;但它们往往价格昂贵…

如何不用口吐莲花,照样成为社交达人

一、教程描述 每个人的一生&#xff0c;70%的时候都在沟通&#xff0c;与老板沟通、与家人沟通、与朋友沟通、与陌生人沟通&#xff0c;等等&#xff0c;但是你真的会沟通么&#xff1f;不论是工作上跟上司、同事和客户间的沟通&#xff0c;还是生活中与家人、朋友、伴侣间的沟…

[ICPC2024 Xi‘an I] ICPC2024 邀请赛西安站(7/8/13)

心得 [ICPC2024 Xian I] ICPC2024 邀请赛西安站重现赛 - 比赛详情 - 洛谷 7表示赛时ac了7个&#xff0c;8表示含补题总共ac数&#xff0c;13表示题目总数 题目 M. Chained Lights 打表&#xff0c;发现只有k1是YES //#include <bits/stdc.h> #include<iostream&…

Mysql 技术实战篇

命令行 导出 - -h localhost&#xff1a;指定MySQL服务器的主机地址为本地主机。如果MySQL服务器在其他主机上&#xff0c;请将localhost替换为相应的主机地址。 - -u username&#xff1a;指定连接MySQL服务器的用户名。将username替换为您的有效用户名。 - -p&#xff1a;提…

Makefile教程(附通用模板)

工程目录 工程目录如图&#xff0c;build文件夹是编译出来的 . ├── app │ ├── imx6ul.lds │ ├── main.c │ ├── makefile │ └── start.S ├── bsp │ ├── clk │ │ ├── bsp_clk.c │ │ └── bsp_clk.h │ ├── delay │…