【matlab】绘图插入局部放大/缩小子图
方法一直接右键设置参考链接代码分为两个绘图代码与magnify.m绘图代码就是普通的绘图代码以下为例%https://zhuanlan.zhihu.com/p/655767542clc clear close all x0:pi/100:2*pi;y1sin(x);plot(x,y1,r-o);hold on y2sin(x)-0.05;y3sin(x)0.05;xlim([02*pi]);ylim([-1.51.5]);plot(x,y2,b-v);plot(x,y3,m-.);legend(线型1,线型2,线型3,Location,northeast)运行该m文件后运行magnify.mmagnify.m与绘图代码放在同一文件夹下magnify.m%https://zhuanlan.zhihu.com/p/655767542functionmagnify(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(nargin0),f1gcf;end;set(f1,...WindowButtonDownFcn,ButtonDownCallback,...WindowButtonUpFcn,ButtonUpCallback,...WindowButtonMotionFcn,ButtonMotionCallback,...KeyPressFcn,KeyPressCallback);return;functionButtonDownCallback(src,eventdata)f1src;a1get(f1,CurrentAxes);a2copyobj(a1,f1);set(f1,...UserData,[f1,a1,a2],...Pointer,fullcrosshair,...CurrentAxes,a2);set(a2,...UserData,[2,0.2],...%magnification, frame sizeColor,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;functionButtonUpCallback(src,eventdata)Hget(src,UserData);f1H(1);a1H(2);a2H(3);set(a1,...Color,get(a2,Color));set(f1,...UserData,[],...Pointer,arrow,...CurrentAxes,a1);if~strcmp(get(f1,SelectionType),alt),delete(a2);end;return;functionButtonMotionCallback(src,eventdata)Hget(src,UserData);if~isempty(H)f1H(1);a1H(2);a2H(3);a2_paramget(a2,UserData);f_posget(f1,Position);a1_posget(a1,Position);[f_cp,a1_cp]pointer2d(f1,a1);set(a2,Position,[(f_cp./f_pos(3:4))00]a2_param(2)*a1_pos(3)*[-1-122]);a2_posget(a2,Position);set(a2,XLim,a1_cp(1)(1/a2_param(1))*(a2_pos(3)/a1_pos(3))*diff(get(a1,XLim))*[-0.50.5]);set(a2,YLim,a1_cp(2)(1/a2_param(1))*(a2_pos(4)/a1_pos(4))*diff(get(a1,YLim))*[-0.50.5]);end;return;functionKeyPressCallback(src,eventdata)Hget(gcf,UserData);if~isempty(H)f1H(1);a1H(2);a2H(3);a2_paramget(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(nargin0),fig_hndlgcf;axes_hndlgca;end;if(nargin1),axes_hndlget(fig_hndl,CurrentAxes);end;set(fig_hndl,Units,pixels);pointer_posget(0,PointerLocation);%pixels {0,0} lower leftfig_posget(fig_hndl,Position);%pixels {l,b,w,h}fig_pointer_pospointer_pos-fig_pos([1,2]);set(fig_hndl,CurrentPoint,fig_pointer_pos);if(isempty(axes_hndl)),axes_pointer_val[];elseif(nargout2),axes_pointer_lineget(axes_hndl,CurrentPoint);axes_pointer_valsum(axes_pointer_line)/2;end运行后直接在原figure框中右键需要放大的地方即可弹出子图此时按住邮件不放并按住Ctrl键和键/-键可放大/缩小子图方法二手动设置范围修改第二十九行、第三十行的范围即可clc clear close all%% 主图 x0:pi/100:2*pi;y1sin(x);plot(x,y1,r-o);hold on y2sin(x)-0.05;y3sin(x)0.05;xlim([02*pi]);ylim([-1.51.5]);plot(x,y2,b-v);plot(x,y3,m-.);legend(线型1,线型2,线型3,Location,northeast);%% 子图局部放大图 % 使用 axes(Position,...) 在主图内部创建子坐标轴% Position [left bottom width height]归一化单位 0~1axes(Position,[0.180.180.30.3]);box onplot(x,y1,r-o);hold onplot(x,y2,b-v);plot(x,y3,m-.);% 设置子图的显示范围局部放大区域%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%xlim([12]);ylim([0.71.1]);% 调整子图刻度字体大小使其更美观set(gca,FontSize,8);方法三直接在现有fig文件的基础上添加子图修改第7行的内容修改第14行、第15行的范围即可%% % 在已有 MATLAB .fig 文件上添加局部放大子图 (Inset)%% clear;clc;close all;%% ------------------- 用户设置区域 -------------------figFileuntitled.fig;% -- 修改为你的 fig 文件路径% inset 在图窗中的位置和大小 (归一化坐标 [left, bottom, width, height], 范围 0~1)% 图1 的 inset 大约在左下角可参考下面这个值insetPos[0.20,0.22,0.28,0.28];% inset 要显示的坐标范围 (根据你想放大的区域修改)insetXLim[1.0,2.0];% x 轴放大区间insetYLim[0.7,1.1];% y 轴放大区间% 是否保存新文件saveNewFigfalse;newFigNamefigure_with_inset.fig;%% --------------------------------------------------% 1. 打开 fig 文件hFigopenfig(figFile,reuse);set(hFig,Color,w);% 确保背景为白色% 2. 定位主坐标轴 (排除 colorbar、legend 等小面积 axes)allAxesfindobj(hFig,Type,axes);areaszeros(length(allAxes),1);fori1:length(allAxes)posget(allAxes(i),Position);areas(i)pos(3)*pos(4);% 用面积判断哪个是主图end[~,maxIdx]max(areas);axMainallAxes(maxIdx);% 3. 提取主图中所有线条对象按原始顺序倒序读取保证图层顺序一致hLinesfindobj(axMain,Type,line);ifisempty(hLines)error(未在主图中找到线条对象请检查 fig 文件。);end% 4. 创建 inset 坐标轴axInsetaxes(Parent,hFig,...Position,insetPos,...Box,on,...Layer,top,...Color,[111],...% 白色背景LineWidth,1,...FontSize,8,...XColor,k,YColor,k);hold(axInset,on);% 5. 在 inset 中按原样式重绘所有线条forilength(hLines):-1:1% 提取数据xDataget(hLines(i),XData);yDataget(hLines(i),YData);% 提取样式属性lineColorget(hLines(i),Color);lineStyleget(hLines(i),LineStyle);lineWidthget(hLines(i),LineWidth);markerget(hLines(i),Marker);markerSizeget(hLines(i),MarkerSize);markerEdgeget(hLines(i),MarkerEdgeColor);markerFaceget(hLines(i),MarkerFaceColor);% 绘制到 insetplplot(axInset,xData,yData,...Color,lineColor,...LineStyle,lineStyle,...LineWidth,lineWidth,...Marker,marker,...MarkerSize,markerSize);% 如果有设置 MarkerFaceColor同步过去ifischar(markerFace)~strcmp(markerFace,none)set(pl,MarkerFaceColor,markerFace);endend% 6. 设置 inset 的显示范围xlim(axInset,insetXLim);ylim(axInset,insetYLim);% 7. 添加网格与图1一致% grid(axInset, on);% 8. 将 inset 置于最上层防止被主图元素遮挡uistack(axInset,top);% 9. 可选保存ifsaveNewFigsavefig(hFig,newFigName);fprintf(已保存: %s\n,newFigName);end

相关新闻

CPU 优化:物理与动画——两个“偷偷吃 CPU“的大户

CPU 优化:物理与动画——两个“偷偷吃 CPU“的大户

🎬 开场:一个"逻辑没多少却卡爆 CPU"的谜团小王的游戏逻辑很简单,可 Profiler 一看 CPU——Physics 和 Animation 两块红得发紫! “我游戏逻辑就那么点,怎么 CPU 全耗在物理和动画上了? 一堆刚体…

2026/8/18 13:33:19 阅读更多 →
为什么普通字符串不直接用 StringBuilder 那套?揭开“两种设计“并存的深意

为什么普通字符串不直接用 StringBuilder 那套?揭开“两种设计“并存的深意

🎬 开场:一个"既然更好为啥不都用"的灵魂拷问 小王彻底困惑了: “既然 StringBuilder 的’可变缓冲区’这么好、不造垃圾, 那为什么普通字符串不直接采用这套设计? 干脆让所有字符串都可变、都用缓冲区&…

2026/8/18 13:33:19 阅读更多 →
flatend API网关配置指南:TOML路由、静态文件与自动HTTPS实战

flatend API网关配置指南:TOML路由、静态文件与自动HTTPS实战

flatend API网关配置指南:TOML路由、静态文件与自动HTTPS实战 【免费下载链接】flatend Quickly build microservices using p2p networking in NodeJS/Go. 项目地址: https://gitcode.com/gh_mirrors/fl/flatend 如果你正在寻找一份能快速上手的 flatend AP…

2026/8/18 13:32:19 阅读更多 →

最新新闻

pgrust 许可证解读:AGPL-3.0 对使用者的影响

pgrust 许可证解读:AGPL-3.0 对使用者的影响

pgrust 许可证解读:AGPL-3.0 对使用者的影响 【免费下载链接】pgrust Postgres rewritten in Rust, now faster than Postgres and Clickhouse 项目地址: https://gitcode.com/GitHub_Trending/pg/pgrust pgrust 是一个用 Rust 从零重写 PostgreSQL 的开源数…

2026/8/18 14:51:18 阅读更多 →
OpenLane-V2 v2.1指标更新解读:TOP分数差异背后的原因

OpenLane-V2 v2.1指标更新解读:TOP分数差异背后的原因

OpenLane-V2 v2.1指标更新解读:TOP分数差异背后的原因 【免费下载链接】OpenLane-V2 [NeurIPS 2023 Track Datasets and Benchmarks] OpenLane-V2: The First Perception and Reasoning Benchmark for Road Driving 项目地址: https://gitcode.com/gh_mirrors/op/…

2026/8/18 14:51:18 阅读更多 →
公共接口安全怎么用,HTTPS 与密钥管理避坑指南

公共接口安全怎么用,HTTPS 与密钥管理避坑指南

从“能跑”到“稳跑”:公共接口集成的安全深水区 在快速原型开发阶段,很多开发者面对 public-apis 这类资源丰富的开源项目时,往往只关注“哪个接口能返回数据”或者"QPS 限制是多少”。只要代码跑通,应用能展示天气、货币汇…

2026/8/18 14:50:17 阅读更多 →
Claude Code中MCP工具链式调用失效的调试与设计优化

Claude Code中MCP工具链式调用失效的调试与设计优化

1. 从一次“工具调用中断”的调试说起 最近在深度集成Claude Code到我的开发工作流时,遇到了一个让我卡壳很久的问题。我写了一个MCP(Model Context Protocol)服务器,用来连接内部的项目管理系统,让Claude Code能帮我查…

2026/8/18 14:50:17 阅读更多 →
多类型节点渲染:RecyclerTreeView 如何同时展示文件夹与文件(附完整代码)

多类型节点渲染:RecyclerTreeView 如何同时展示文件夹与文件(附完整代码)

多类型节点渲染:RecyclerTreeView 如何同时展示文件夹与文件(附完整代码) 【免费下载链接】RecyclerTreeView TreeView implement in Android with RecyclerView. 项目地址: https://gitcode.com/gh_mirrors/re/RecyclerTreeView 在 A…

2026/8/18 14:50:17 阅读更多 →
四千多个免费接口怎么挑,Public APIs 分类检索技巧

四千多个免费接口怎么挑,Public APIs 分类检索技巧

面对四千多个免费接口,很多开发者的第一反应不是兴奋,而是“选择困难症”。在 public-apis 这个开源项目中,收录了超过 140 个分类、数千个 API 资源。从动物图片到加密货币行情,从天气预报到机器学习模型,资源确实丰富…

2026/8/18 14:50:17 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →