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

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

1、利用magnify函数
2、利用axes函数

方法一

源自MathWorks社区,利用magnify.m文件,可以登录MathWorks帐号后下载magnify函数(没有帐号可以直接注册一个)。
在MATLAB的figure图中画局部放大的图中图_第1张图片
1.下载解压后将magnify.m文件放入需要操作的figure图的工作目录下
2.打开(或选中)figure图,在MATLAB命令窗口输入magnify
3.在figure图中,将鼠标停在想要放大的区域处,点击鼠标右键不要松开手,此时鼠标点击处出现类似放大镜的方框(可以一直按住右键并移动鼠标改变区域位置),并通过“<”和“>”键缩小或扩大方框范围,通过“-”和“+”键减小或增加局部缩放比例,直到得到自己想要的小图后即可松开鼠标右键。若想得到多个小图,重复上述操作即可。(这一过程通常叫做固化)
4.通过figure菜单栏中的tools->edit plot选项或选中工具栏中的白色箭头来调节小图位置,也可单独在小图中编辑图形的坐标轴、线形、颜色等。
方法一所见即所得,可以放大一个或多个区域。

方法二

MATLAB文档中axes函数的解释为Create axes graphics object,即创建坐标轴图形对象。其中有一个功能Position Multiple Axes in Figure Window可以Create multiple axes in a single figure window and specify their positions,也就是可以在一幅图形窗口内创建多个坐标轴并指定它们的位置。

axes('Position',[subNormalxLabel,subNormalyLabel,normalWidth,normalHeight])

其中,subNormalxLabel为子图左下角位置的归一化横坐标,subNormalxLabel为子图左下角位置的归一化纵坐标,计算公式为:
subNormalxLabel = (该位置的横坐标-横坐标起始值)/横坐标量程
subNormalyLabel = (该位置的纵坐标-纵坐标起始值)/纵坐标量程
normalWidth为子图的归一化宽度,normalHeight为子图的归一化高度,计算方式类似。

MATLAB给出的一个示例代码:

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))

效果图
在MATLAB的figure图中画局部放大的图中图_第2张图片
实际中遇到的问题如下图:在给定的尺度下,两条曲线几乎重合(红色曲线几乎被蓝色曲线覆盖),需要对局部放大以示区分,两条曲线的数据(x1,y1)、(x2,y2)已知,x1、y1、x2、y2均为数组。
在MATLAB的figure图中画局部放大的图中图_第3张图片
1.在MATLAB下,选中上图的figure图,利用axes语句(例如axes('Position',[0.4 0.3 0.3 0.25]);),得到如下的图中图
在MATLAB的figure图中画局部放大的图中图_第4张图片
2.利用已知数据将大图中的曲线画入子图中,并利用figure中的放大镜等工具在大图中确定需要放大的范围及效果(例如放大区域为[xmin, xmax, ymin, ymax]),而后将子图的坐标轴范围改为[xmin, xmax, ymin, ymax]即可,随后可对子图进行编辑,效果如下
在MATLAB的figure图中画局部放大的图中图_第5张图片
如果想得到多个子图可重复上述操作。
方法二可以精确到具体的放大范围,也可以放大多个区域。


  1. http://cn.mathworks.com/matlabcentral/fileexchange/5961-magnify
    http://blog.csdn.net/wangh0802/article/details/70237118
    http://5460521xp.blog.163.com/blog/static/6908756920122210253741 ↩︎

  2. 搜索过程中还存在第三种方法,即利用Mastering MATLAB 7示例中函数的方法,主要利用其提供的三个函数
    getn():将get()函数的输出参数简化为单个变量
    getbox():实现矩形区域的选择,并捕捉该区域的横纵标的范围
    mmzoom:创建一个缩放坐标轴
    但由于原下载链接http://www.eece.maine.edu/mm/失效,暂未找到原函数文件,待日后找到再续。 ↩︎

你可能感兴趣的:(实用技巧)