% 之前写论文的时候,出图用到了局部放大图,当时网上搜到了一个比较好用的函数:magnify.m文件。源自MathWorks社区,下载解压,画完图后载入该文件即可。
% 鼠标停放在想放大的区域,按住右键,此时鼠标点击处出现类似放大镜的方框,可以移动选择要放大的区域,通过'<'和'>'缩小或扩大方框范围,
% 通过'-'和'+'键减小或增加局部缩放比例,调整到自己想到的区域和缩放大小,松开右键即可。
% 重复上述可放大多个,将Figure调整到可选中状态,可移动局部放大图的放置位置。
% 这个方法用了挺久,也很好用,但是长宽比是不能改的,于是又找到了另外一种方法,即使用matlab自带函数:
% axes('Position',[subNormalxLabel,subNormalyLabel,normalWidth,normalHeight])
% 参数说明:
% subNormalxLabel 为子图左下角位置的归一化横坐标,subNormalxLabel为子图左下角位置的归一化纵坐标,计算公式为:
% subNormalxLabel = (该位置的横坐标-横坐标起始值)/横坐标量程
% subNormalyLabel = (该位置的纵坐标-纵坐标起始值)/纵坐标量程
% normalWidth为子图的归一化宽度,normalHeight为子图的归一化高度,计算方式类似。
% 创建坐标轴对象,那么在一张图中创新两个或多个不同的坐标轴,可实现局部放大功能,且可自己控制子图长宽比。clear;close;
%先画第一个大图像
set(groot,'defaultAxesColorOrder',[0 0 0;1 0 0],...'defaultAxesLineStyleOrder','--|-|:|-.');% groot refers to the graphics root object——help% 这里的设置对象(groot)不能是h1或h2,否则不起作用% 设置绘制点线的样式和他们的顺序,这里设置的顺序依次为:% 黑色虚线、红色虚线;黑色实线、红色实线;黑色点点、红色点点;黑色点线、红色点线
h1=axes('position',[0.08 0.1 0.85 0.85]); % 创建一个坐标系%让 坐标轴的左下角 与 窗口左侧 的距离时窗口宽度的8%,距离下侧10%%整个坐标轴的宽占85%,高占85%。一个小框就出来了
axes(h1);     %将h1设置为当前坐标系,为绘图准备
Z = peaks; x = 1:length(Z);y = Z(3:10,:);
plot(x,y);   axis(h1,[0,49,-6,0.5]);  %坐标轴句柄h1不能少!%画图     %x的坐标范围是0到2π,y的范围是-0.5到0.5
legend('黑色虚线','红色虚线','黑色实线','红色实线','黑色点点','红色点点','黑色点线','红色点线')% 在原图上插入一个新的小图像
set(groot,'defaultAxesLineStyleOrder','remove','defaultAxesColorOrder','remove');%每次使用记得清除上次设置的参数,否则设置的参数会被保留下来
h2=axes('Position',[0.15 0.15 0.3 0.3]);% 建立的坐标轴把原来的覆盖了是吧?这说明建立坐标轴是在绘图(点、线)之前
axes(h2);                  % 将h2设置为当前坐标系
%plot(rand(10,3));
plot(x,y)
set(h2,'xlim',[10 15]);
%%%%%%%%%%%%%%%%%%%%%%%-------------案例2——
figure
axes('Position',[0.1,0.1,0.7,0.7])
contour(peaks(20))axes('Position',[0.65,0.7,0.28,0.28])
surf(peaks(20))

先准备好一张图,然后直接在命令行里运行:

showdetail();

然后分为如下几部操作:

【1】这是事先准备好的一张图

【2】运行程序后选择ROI,即感兴趣的区域,双击左键确定

【3】选择你想要放置的地方,双击左键确定

【4】成品图

 function showdetail()
% 在当前的axes上操作,用矩形框选出感兴趣的一
% 块区域然后在现有的axes里新建一axes将其画出
set(gcf,'color','white');
% 拿到axes在figure中的坐标值及其刻度值分布范围
Pos   = get(gca,'Position');
X0    = Pos(1);
Y0    = Pos(2);
DX    = Pos(3);
DY    = Pos(4);
DLX   = xlim;
DLY   = ylim;% 拿到axes中曲线数据
h     = findobj(gcf,'Type','line');
xdata = get(h,'XData');
ydata = get(h,'YData');
Color             = get(h,'Color');
LineStyle         = get(h,'LineStyle');
LineWidth         = get(h,'LineWidth');
Marker            = get(h,'Marker');
MarkerSize        = get(h,'MarkerSize');
MarkerEdgeColor   = get(h,'MarkerEdgeColor');
MarkerFaceColor   = get(h,'MarkerFaceColor');% 选取需要放大显示的细节部分ROI
h1   = imrect;                   % 框选出需要的区域
wait(h1);
pos  = getPosition(h1);          % 返回区域的位置和大小
x0   = pos(1);
y0   = pos(2);
dx0  = pos(3);
dy0  = pos(4);% 细节部分的下标
if  iscell(xdata) == 0 indx1  = find( xdata >= x0 );indx2  = find( xdata <= x0+dx0 );indx   = indx1(1):indx2(end);
elsem      = length(xdata);indx1  = find( xdata{1}>=x0 );indx2  = find( xdata{1}<=x0+dx0 );indx   = indx1(1):indx2(end);
endhold on;
LineX = x0:dx0/10:x0+dx0;
LineY = y0:dy0/10:y0+dy0;
plot(LineX,y0*ones(size(LineX)),'k');
plot(LineX,(y0 + dy0)*ones(size(LineX)),'k');
plot(x0*ones(size(LineY)),LineY,'k');
plot((x0+dx0)*ones(size(LineY)),LineY,'k');h2  = imrect;
wait(h2);
pos = getPosition(h2);
x   = pos(1);
y   = pos(2);
dx  = pos(3);
dy  = pos(4);xn  = X0 + DX*(x - DLX(1))/( DLX(2) - DLX(1) );
yn  = Y0 + DY*(y - DLY(1))/( DLY(2) - DLY(1) );
dxn = DX*dx / ( DLX(2) - DLX(1) );
dyn = DY*dy / ( DLY(2) - DLY(1) );
delete(h1);
delete(h2);
axes('Position', [xn yn dxn dyn]);if  iscell(xdata) == 0 plot(xdata(indx),ydata(indx),...'Color',Color,...'LineStyle',LineStyle,...'LineWidth',LineWidth,...'Marker',Marker,...'MarkerSize',MarkerSize,...'MarkerEdgeColor',MarkerEdgeColor,...'MarkerFaceColor',MarkerFaceColor);
elsefor i = 1:mplot(xdata{i}(indx),ydata{i}(indx),...'Color',Color{i},...'LineStyle',LineStyle{i},...'LineWidth',LineWidth{i},...'Marker',Marker{i},...'MarkerSize',MarkerSize{i},...'MarkerEdgeColor',MarkerEdgeColor{i},...'MarkerFaceColor',MarkerFaceColor{i});hold on;endend
set( gca , 'Box', 'off');
axis([x0 x0+dx0 y0 y0+dy0]);
hold off;end

MATLAB图中图局部放大几种方法相关推荐

  1. 在MATLAB的figure图中画局部放大的图中图

    在MATALB绘图中,有时会遇到这样的情况,需要通过放大figure图的局部,针对细节加以说明.例如:在给定的尺度下有两条或多条曲线难以区别,此时就需要对其进行局部放大来加以区分.参考网上的解决方法1 ...

  2. matlab画一个局部放大的图中图

    局部放大的图中图 第一种:magnify是个动态放大镜,固化后可以用tools>editplot移动小图,能选取多个局部图,这个方法不错 用法:打开figure图,输入magnify,左键动态选 ...

  3. 用旭日图展示数据的三种方法

    什么是旭日图? 旭日图(Sunburst Chart)是一种现代饼图,它超越传统的饼图和环图,能表达清晰的层级和归属关系,以父子层次结构来显示数据构成情况.旭日图中,离远点越近表示级别越高,相邻两层中 ...

  4. MATLAB中使用magnify做图中图

    网上一般有三种方法在MATLAB中做图中图,但是我感觉使用magnify是magnify是个动态放大镜,固化后可以用tools>edit plot移动小图,能选取多个局部图.下面详细讲解其使用方 ...

  5. 在MATLAB中生成矩阵的三种方法

    在MATLAB中生成矩阵的三种方法 1. 直接输入法 2. 外部文件读入法 3.特殊矩阵函数生成法 1. 直接输入法 (1)矩阵所有元素必须在[]内 (2)矩阵中同行元素以逗号','或空格分隔 (3) ...

  6. 怎样能让计算机桌面软件变小,win7系统桌面图标如何变小?win7系统把桌面图标变小的4种方法...

    win7系统桌面图标如何变小?有些用户升级win7系统后发现桌面图标很大,与之前xp系统有很大区别,看着不舒服,win7系统桌面图标如何变小?其实把桌面变小有很多方法,下面小编一一向大家win7系统把 ...

  7. 14_面向对象API绘图、图中图 (A Plot inside of Another Plot)、设定绘图范围Setting the Plot Range、对数尺度Logarithmic Scale

    14.面向对象API绘图 14.1.图中图 (A Plot inside of Another Plot) 14.2.设定绘图范围 (Setting the Plot Range) 14.3.对数尺度 ...

  8. 用matlab设计fir高阶滤波器,用matlab设计fir滤波器的三种方法.doc

    用matlab设计fir滤波器的三种方法.doc 用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法程序设计法.FDATO ...

  9. Python画图(直方图、多张子图、二维图形、三维图形以及图中图)

    Python画图很方便,不管是平时的学习还是教学当中,都将经常用到,特别直观,其中主要用到两个常用的库,一个二维和三维的:matplotlib.pyplot,mpl_toolkits.mplot3d ...

  10. OpenCV精进之路(零):访问图像中像素的三种方法

    访问像素的三种方法 指针访问:最快 迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 动态地址计算:更慢,通过at()实现.适用于访问具体某个第i行,j列的像素,而不适用遍历像素 这里 ...

最新文章

  1. JQuery Datatable用法
  2. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...
  3. BZOJ5319 洛谷4559 LOJ2551:[JSOI2018]军训列队——题解
  4. SQL Server查询某个字段存在哪些表中
  5. 复习笔记(七)——C++友元
  6. 安卓dalvik和art区别
  7. 【Elasticsearch】es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么
  8. 切换回Chrome上的上次标签及打开设置快捷键
  9. perl linux 独立运行,Perl脚本打包为独立执行程序
  10. 15款最好用的新浪短链接(t.cn接口)在线生成工具
  11. 计算机登录界面没有用户显示不出来,win7让administrator账户不出现在登陆界面方法...
  12. 简单易懂的讲解深度学习(入门系列之八)
  13. 关于 npm publish问题
  14. stm32获取心知天气使用cJSON提取需要数据
  15. 哪款视频压缩软件比较好用?
  16. Python自动化实践
  17. Java中if条件语句举例详解
  18. 计算机三级网络技术最全知识点总结【5】
  19. 【回溯】leetcode1219.黄金矿工
  20. 计算机专业学生给家长的一封信,大学致家长的一封信

热门文章

  1. 硬盘坏了可以修复吗?硬盘数据恢复方法来了
  2. 心肺运动试验----各类参数分析笔记
  3. 06-播放器-搭建媒体服务器测试videojs
  4. 用plt.scatter画散点图
  5. GET和POST两种基本请求方法的区别 1
  6. fMRI与MRI区别+名词解释+MRI中T1和T2的含义与区分
  7. Android 绘制电池电量图标(含充电状态)。
  8. 猜拳游戏(基于TCP socket的编程)
  9. 交叉编译apr和apr-util库
  10. 今日知识资源干货分享