【发布时间】:2019-07-25 23:52:20
【问题描述】:
我正在使用我编写的一个函数来加载和分析时间序列数据,如果该序列包含一些有趣的东西,则绘制一个带有子图的图形。
这是代码的绘图部分:
if ~isempty(failure_x)
figure(call_n)
sgt = sgtitle(filename);
sgt.FontSize = 10;
subplot(5,1,1)
scatter([1: length(max_vol)], max_vol, '.')
set(subplot(5,1,1), 'XLim', [1, length(max_vol)])
subplot(5,1,2)
scatter([1:length(flow)], flow, '.')
set(subplot(5,1,2), 'XLim', [1, length(max_vol)])
subplot(5,1,3)
scatter([1: length(hlfv)], hlfv, '.')
set(subplot(5,1,3), 'XLim', [1, length(max_vol)])
subplot(5,1,4)
scatter([1: length(stats)], stats(:,2), '.')
set(subplot(5,1,4), 'XLim', [1, length(max_vol)])
subplot(5,1,5)
scatter(failure_x, failure_y)
set(subplot(5,1,5), 'XLim', [1, length(max_vol)])
end
当我从命令行单独调用此函数时,一切都正确绘制,但是当我从 for 循环调用它时,最后一个子图似乎总是从下一个函数调用图中的第一个子图for 循环。基本上,在迭代 1 中,subplot(5,1,5) 显示来自迭代 2 subplot(5,1,1) 的数据。
我添加了一个参数“call_n”来强制数字从 for 循环传入的数字增加,但这似乎并没有解决问题。
有什么想法吗?我通常在 python 中编码,所以我确定我在做一些愚蠢的事情。
编辑:这是调用函数“detect_hlfv”的循环
for i = 1:length(fnames)
fname = strcat(data_dir, fnames(i).name);
failures = detect_hlfv(fname, i);
if length(failures) > 0
disp("FAILURE!")
disp(fname);
end
end
【问题讨论】:
-
请在您的代码中包含
for循环(其最小版本),以便代码重现问题 -
如果您使用
f = figure(call_n),然后将此图形对象指定为子图subplot( 5, 1, 1, 'parent', f )的父对象,您是否仍然遇到问题?同样,您可以强制子情节成为情节父母...sp = subplot(5,1,1); scatter( sp, x, y ); -
谢谢,但这些都不起作用:(
-
Minimal,Complete,Verifiable example。 (最小-> 2 个子图是否表现出相同的行为?完整-> 为我们提供可以复制粘贴并重现您的问题的代码,时间很宝贵。可验证-> 显然代码应该重现相同的问题)顺便说一句,由尝试创建这样一个(最小且完整的)示例通常会导致您自己调试问题。嗯,我不得不说,我希望@Wolfie 的建议能够奏效。
标签: matlab loops figure subplot