请考虑以下示例代码:
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是subplot2的一部分。例如:
如何在matlab中实现这一目标?
编辑:
我在考虑在整个图形上生成不可见轴的线条,获取每个子图的位置,20和40的位置将是子图宽度的一定百分比,所以我可以使用注释命令从这里开始一行,然后将相同的方法应用于第三个子图,以连接具有所需位置的线。我试过这个,但到目前为止还没有解决方法。
答案 0 :(得分: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
结果:
答案 1 :(得分:6)
在游戏中稍晚,但知道文件交换(FEX)上提供的这些可选工具仍然是有益的:
inset2DAbsolute - 创建一个使用较大轴定义的轴插入和相应的注释。
On-figure magnifier - 是同一绘图中图像的2D图形的缩放工具。它由两个块(次轴和放大镜)组成。辅助轴可以在图的限制范围内任意分配,显示放大镜标记的区域。
答案 2 :(得分:1)
有趣的问题。
然而,根据我的经验,使用图形软件可以更有效地完成图形和图表的美化 我通常使用excel + powerpoint来达到这个目的。
因此,我的建议(对你的问题不是一个好的答案)是:
使用xlswrite
使用excel创建所需的图。
将图表复制粘贴到“手工制作”整理的电源点...