13

考虑以下示例代码:

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

导致 在此处输入图像描述

我想通过在子图 2 和 3 之间插入线来更改此图,以显示子图 3 是子图 2 的一部分。例如:

在此处输入图像描述

这在matlab中如何实现?

编辑:

我正在考虑在整个图形上生成一个不可见轴的方法,获取每个子图的位置,20 和 40 的位置将是子图宽度的一定百分比,所以我可以使用注释命令从这里开始一条线,然后将相同的方法应用于第三个子图以将线与所需位置连接起来。我已经尝试过了,但到目前为止还没有解决方案。

4

3 回答 3

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

现在让我们根据需要添加“注释”行:

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

结果:

结果图像

于 2013-01-24T18:32:31.943 回答
6

游戏有点晚了,但了解文件交换 (FEX) 中可用的这些可选工具仍然是有益的:

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

在此处输入图像描述

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

在此处输入图像描述

于 2013-01-26T06:46:48.240 回答
1

有趣的问题。

但是,根据我的经验,使用图形软件可以更有效地美化图形和绘图。
为此,我通常使用 excel + powerpoint。

因此,我的建议(这对您的问题来说并不是一个很好的答案)是:

  • 将数据导出到 Excel,使用xlswrite

  • 使用 excel 创建所需的绘图。

  • 将绘图复制粘贴到 power point 以进行“手工”整理...

于 2013-01-24T12:59:14.103 回答