Matlab:在不绘制绘图的情况下更新等待栏
Matlab: Update waitbar without drawing 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 文件的每一行,并绘制从 r0
到 r-1
的行,其中 p(r,4)
保持不变。我对看到绘制的每一行都不感兴趣,所以我希望 Matlab 在后台绘制所有内容,然后再显示结果。由于该绘图需要相当长的时间,我希望在后台绘图时看到我的等待栏更新。
但是有一个问题:每次等待栏更新时,都会绘制绘图(类似于 drawnow
命令)。与在后台绘制相比,这需要花费大量时间。 如何在不绘制绘图的情况下更新我的等待栏?
您可以使用 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
我正在尝试绘制许多不同长度的单线。因此,我使用了一个相当简单的代码:
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 文件的每一行,并绘制从 r0
到 r-1
的行,其中 p(r,4)
保持不变。我对看到绘制的每一行都不感兴趣,所以我希望 Matlab 在后台绘制所有内容,然后再显示结果。由于该绘图需要相当长的时间,我希望在后台绘图时看到我的等待栏更新。
但是有一个问题:每次等待栏更新时,都会绘制绘图(类似于 drawnow
命令)。与在后台绘制相比,这需要花费大量时间。 如何在不绘制绘图的情况下更新我的等待栏?
您可以使用 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