【问题标题】:Matlab figure always visibleMatlab图形始终可见
【发布时间】:2013-04-16 11:31:53
【问题描述】:

我写了一个 matlab 函数,它在一个图形上做了很多事情。

现在,问题是在程序终止执行之前不会显示图形,但我希望在程序运行时实时显示图形,并进行所有修改,并始终在前台显示。

我该怎么做? figure('visible','on') 不排序任何效果,也不 set() 命令。

代码sn-p:

set(gcf,'visible','on')
parfor (i=1:n, 8)

    if norm(A(i,:))<1
        countr=countr+1;
    end
    hold on;
    plot(A(i,1),A(i,2),'+')

end

谢谢。

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

    我不推荐它,但我认为你需要添加一些drawnow 语句,它会同步视觉和计算线程。

    【讨论】:

    • 谢谢,有了drawow,我得到了想要的结果。不幸的是,它使执行速度变慢了很多。还有其他方法吗?
    • @user2157783 这就是我不推荐它的原因,你的计算必须等待图形完成。您不能添加一个计数器,使drawnow 每 10 次执行一次。
    【解决方案2】:

    默认情况下,图形必须是可见的;否则你应该修改这个属性。因此,请尝试查找包含wait 的任何代码。 其他选择是尝试figure(gcf) 将焦点带到您想要的数字上。

    【讨论】:

    • 不确定它是否真的符合我的目的,但我会做一些关于等待语句的研究。谢谢!
    【解决方案3】:

    figure('visible','on') 语句创建了一个图形,但您想让已经存在的图形可见,因此使用:

    set(gcf,'visible','on')
    

    编辑 2

    我无法重现这个问题(可能这个例子不是一个好例子):

    A = rand(100,2);
    set(gcf,'visible','on')
    hold on
    parfor (i=1:100, 8)
            plot(A(i,1),A(i,2),'+')
            pause(0.01)
    end
    

    旧编辑 Parfor 和图形(来源“How to see plots during parfor”):

    根据消息来源,快速回答是您不能在parfor 中更新屏幕输出,而是使用drawnow,这违背了parfor 的目的。因此,您是否严格需要 parfor?

    但是,请参阅我的 EDIT 2

    【讨论】:

    • 不幸的是,即使使用 set(),图形也会在最开始创建并停留在前台,但在算法终止执行之前什么都不会绘制。
    • 当然,您需要在算法中包含该语句。您可以使用edit yourfunction 访问代码,此时很容易找到将图形设置为不可见的潜在语句并将其注释掉。
    • 也许我说的太含糊了,我会更准确地说:for 循环的每次迭代都会执行一个“plot(something)”语句。我要求人物站在前台并在每次迭代中升级。现在,我在代码中将 set() 语句放在 for 循环之前,但问题仍然存在。另外,AFAIK,我的代码中没有任何语句使图形不可见......再次感谢。
    • 那么您应该每次刷新数据时都不要绘制:mathworks.co.uk/help/matlab/data_analysis/…。另外,如果您可以发布一个 sn-p 代码,它会有所帮助。
    • 我编辑了原始帖子,难以在 cmets 中引用代码。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2015-09-12
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多