Matlab:更新等待栏而不绘制绘图

时间:2015-03-24 13:57:34

标签: matlab user-interface plot

我正在尝试绘制不同长度的大量单行。因此,我使用了一个相当简单的代码:

p = csvread('C:\path\file.csv',2,0,[2,0,1000000,3]);
h=waitbar(0,'Plotting...');
for r=1:size(p,1)
    waitbar(r/size(p,1),h);
    r0=r;
    t0=p(r0,4);
    while(r<=size(p,1) && p(r,4)==t0)
        r=r+1;
    end
    plot(p(r0:r-1,2),p(r0:r-1,3));
    hold on
end
close(h);

此代码遍历我的csv文件的每一行,并绘制从r0r-1的行,p(r,4)保持不变。我对看到每一条线都没有兴趣,所以我希望Matlab在背景中绘制所有内容并在之后显示结果。由于该绘图需要相当长的时间,我希望在后台绘图时看到我的等待栏更新。

但是有一个问题:每次等待栏更新时,都会绘制绘图(类似于drawnow命令)。与在后台绘图相比,这需要很多时间。 如何在不绘制情节的情况下更新我的等待栏?

1 个答案:

答案 0 :(得分:1)

您可以使用set(h,'Visible','off');隐藏地图,直到您需要查看它为止。根据我运行的一些快速测试,这只能提供大约25%的速度降低。

例如:

h = figure(1);              %// get figure handle
set(h,'Visible','off')      %// hide plot window
hold on;
t = -10:0.1:10;             %// create curves on the plot
plot(t,sin(t),'b');         
plot(t,sin(t+2*pi/3),'r');
plot(t,sin(t-2*pi/3),'g');
set(h,'Visible','on');      %// draw plot