【问题标题】:Avoid figure popping up continuously in MATLAB避免在MATLAB中连续弹出图形
【发布时间】:2017-10-04 09:23:50
【问题描述】:

如何避免 MATLAB 在循环内绘制数据时弹出带有两个轴的 GUI 图 f。 这是一个简单的例子:

f=figure;

ax.h1 = axes('Parent',f,'Position',[0.1 0.1 0.8 0.35],'Units','normalized');
ax.h2 = axes('Parent',f,'Position',[0.1 0.6 0.8 0.35],'Units','normalized');

for j=1:20
    axes(ax.h1)
    hold on
    plot(1:3,(1:3)+j)

    axes(ax.h2)
    hold on
    plot(1:3,(1:3)+1+j)

    pause(2)

end

我需要持续绘制数据几个小时。因此,如果每次生成新图时 MATLAB 都不会弹出,那就太好了。

谢谢!

【问题讨论】:

  • 使图形不可见...但是,更好的方法是存储数据,然后在准备好后一次性绘制所有内容。
  • 我可能是错的,但我相信你让它们“弹出”的原因是因为你调用了“axes”命令,它的副作用是该特定的轴将被显示和带来到最前沿。如果您只想“绘制”到该轴,可以直接从plot 命令执行此操作,即plot(ax.h1, bla bla bla)。
  • @Dev-iL。这是一个 GUI 图,带有一些按钮。所以我想继续寻找数据。如果我使图形不可见,我的 GUI 将不可见,这不会发生。如果我在不绘图的情况下继续存储数据,我将无法跟踪正在发生的事情。

标签: matlab popup figure axes


【解决方案1】:

正如@TasosPapastylianou 所指出的,axis 调用将窗口带到了前面。删除循环中的axishold on 调用,并使用plot(ax.h1, ... 绘制到特定轴。您只需为每个轴调用一次hold on,因此请在开始时使用hold(ax.h1, 'on') 等执行此操作。然后您的图表应该会在后台继续更新,而不会每次都出现在前面。

你的例子变成了:

f=figure;

ax.h1 = axes('Parent',f,'Position',[0.1 0.1 0.8 0.35],'Units','normalized');
ax.h2 = axes('Parent',f,'Position',[0.1 0.6 0.8 0.35],'Units','normalized');
hold(ax.h1, 'on')
hold(ax.h2, 'on')

for j=1:20
    plot(ax.h1, 1:3,(1:3)+j)
    plot(ax.h2, 1:3,(1:3)+1+j)

    pause(2)

end

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2012-09-21
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多