【问题标题】:MATLAB: Problem with calling a function (from a loop) that creates a figure with subplotsMATLAB:调用创建带有子图的图形的函数(从循环)出现问题
【发布时间】: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


【解决方案1】:

我是个白痴!我忘记注释掉在实例化后绘制变量的调试代码行。问题已解决,感谢帮助!

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多