在matlab中用线连接子图

Kat*_*tyB 13 matlab plot matlab-figure

请考虑以下示例代码:

load sumsin; 
s = sumsin+10; % example data series
time = linspace(0,5*24,1000);

figure(1);
subplot(311);
plot(time,s,'k');

subplot(312);
plot(time,s,'k');
hold on;
[s_denoised,~, ~] = wden(s,'minimaxi','s','sln',1,'db4');
plot(time,s_denoised,'r');

subplot(313);
plot(time,s,'k');
hold on;
plot(time,s_denoised,'r');
xlim([20 40]);
Run Code Online (Sandbox Code Playgroud)

导致 在此输入图像描述

我想通过在子图2和3之间插入线来改变这个图,以表明子图3是subplot2的一部分.例如:

在此输入图像描述

如何在matlab中实现这一目标?

编辑:

我想到的是在整个图形上生成一个不可见轴的线条,获得每个子图的位置,20和40的位置将是子图宽度的一定百分比,所以我可以使用此处的注释命令开始一行,然后将相同的方法应用于第三个子图,以将线连接到所需的位置.我试过这个,但到目前为止还没有解决方法.

Eit*_*n T 12

只是为了答案,你可以annotation objects用来获得你正在寻找的效果,正如在评论中正确建议的那样.请注意,它们的坐标必须相对于图形窗口标准化为[0,1]范围,因此调整它们可能相当繁琐.

确实完成了工作,但它太可怕了.不要这样做.

由于我没有你的原始数据,我会画一些我自己的(但与你的相似):

t = linspace(0, 120, 1000);
s_denoised = sin(t / 2);
s = s_denoised + 0.2 * randn(size(s_denoised));
subplot(3, 1, 1), plot(t, s, 'k')    
subplot(3, 1, 2), plot(t, s, 'k', t, s_denoised, 'r')    
subplot(3, 1, 3), plot(t, s, 'k', t, s_denoised, 'r'), xlim([20 40])
Run Code Online (Sandbox Code Playgroud)

现在让我们添加你想要的"注释"行:

annotation('doublearrow', [.26 .39], [.38 .38]); %// Top double-arrow line
annotation('doublearrow', [.13 .9], [.34 .34]);  %// Bottom double-arrow line
annotation('line', [.325 .325], [.38 .37]);      %// Top little connector
annotation('line', [.515 .515], [.35 .34]);      %// Bottom little connector
annotation('line', [.325 .515], [.37 .35]);      %// Line
Run Code Online (Sandbox Code Playgroud)

结果:

结果图像

  • +1用于处理注释对象!当它们真正有用时,我一直在等待释放(提示:它不是R2013a). (6认同)

bla*_*bla 6

在游戏中稍晚,但知道文件交换(FEX)上可用的这些可选工具仍然是有益的:

inset2DAbsolute - 创建一个使用较大轴定义的轴插入和相应的注释.

在此输入图像描述

图形放大镜 - 是同一绘图中图像的2D图形的缩放工具.它由两个块(次轴和放大镜)组成.辅助轴可以在图的范围内任意分配,显示由放大镜标记的区域.

在此输入图像描述