在用matlab画图的过程中,当图像内容过于密集或较小时,为了更清晰的了解图像内容,我们常常需要对图像进行局部放大以利于观察。这段时间我也刚好用到,也走了一些弯路,现将一些注意事项分享一下,希望对有需要的朋友有所帮助。
axes('Position',[subnormalxlabel,subnormalylabel,normalwidth,normalheight])
对于局部放大可以采用axes,其中:
subnormalxlabel,subnormalylabel,normalwidth,normalheight 分别为归一化的横坐标,纵坐标,宽度,高度。其实也就是占图窗的比例。对于图的位置、大小,我们需要知道目标起始点的坐标、图的目标宽度和目标高度就可以确定。
归一化的x坐标=(目标起始点x坐标-原点x坐标)/量程
归一化的y坐标=(目标起始点y坐标-原点y坐标)/量程
归一化的宽度=目标宽度/量程
归一化的高度=目标高度/量程
先用简单的代码随意画一张图吧
x=0:20;
y=x;
figure(1)
plot(x,y)
grid on
一开始我是想着在坐标(8,10)处为起始点,画一个宽为6,高为6的局部放大图,即归一化坐标:
(8-0)/20=0.4;(10-0)/20=0.5;6/20=0.3;6/20=0.3。运行代码
x=0:20;
y=x;
figure(1)
plot(x,y)
grid on
axes('Position',[0.4,0.5,0.3,0.3]); % 生成子图
plot(x,y)% 绘制局部曲线图
xlim([4,8]); % 设置坐标轴范围
ylim([4,8]);
结果图如下:
从图中可以发现,和预想中的不太一样,位置和大小都有些偏差。后来也找了一下资料,看到这篇文章,链接:知乎 https://www.zhihu.com/question/510290982/answer/2304419709
这里用Ta的一张图,我觉得比较直观明了。
可以看出,所谓的原点并不是x轴,y轴坐标系的(0,0),而是蓝色方框的左下角。所以我之前的计算值会偏小,导致出现偏差。我也验证了一下,归一化x坐标为0.13,y坐标为0.11,发现刚好可以与坐标系重合。
所以我之前的想法在坐标(8,10)处为起始点,画一个宽为6,高为6的局部放大图应该这么计算:
x归一化:(x-0)/宽量程 = x归一化值/0.775
可以解出 x归一化值,将解出的x归一化值加上0.13就是最终的 x归一化。
y归一化:(y-0)/高量程 = y归一化值/0.815
可以解出 y归一化值,将解出的y归一化值加上0.11就是最终的 y归一化。
归一化的宽度:目标宽度/宽量程 = 归一化的宽度/0.775,直接解出归一化的宽度。
归一化的高度:目标高度/高量程 = 归一化的高度/0.815,直接解出归一化的高度。
用代码验证一下
x=0:20;
y=x;
figure(1)
plot(x,y)
grid on
axes('Position',[0.44,0.5175,0.2325,0.2445]); % 生成子图
plot(x,y)% 绘制局部曲线图
xlim([4,8]); % 设置坐标轴范围
ylim([4,8]);
可以发现和预期的想法一致。当然如果不需要特别精确的话,可以用我最初的想法当作估算也是可以的,然后再根据实际需要微调即可。下面放一张效果图:
发现效果还是可以的,那么分享就到这里了,希望对你们有所帮助。