我有一个MATLAB gui,它演示了实时输入数据信号和水平阈值线的绘图:
axes(handles.axes1);
plot([1 windowLength].*1/sampleFreq, [-data1Threshold -data1Threshold],'k','linewidth',2);
% Plotting the threshold line
xlim([1 windowLength].*1/sampleFreq);
ylim([-300 300]);
xlabel('Time (s)')
ylabel('Filtered signal (uV)')
hold on;
plot([1:10:length(data1)].*1/sampleFreq, data1(1:10:end),'b','linewidth',2);
% Plotting the signal over the threshold line
hold off;
drawnow;
这部分代码位于while循环内,因此在阈值线相同时绘制信号的不同部分(输入信号)。 问题是gui运行速度很慢。无论如何我可以修复阈值线和轴信息,这样我只能更新输入信号以提高速度吗?
我已经尝试了以下方法来修复绘图的句柄,但是,这仍然要求我在每次迭代时绘制阈值线和信号...(也不知道如何使用具有多个数据线的set函数图,阈值线和信号)
handles.plot1 = plot([1 windowLength].*1/sampleFreq, [-data1Threshold -data1Threshold],'k',[1:1:length(data1)].*1/sampleFreq, data1,'b','linewidth',2);
set(handles.plot1,'xdata',[1:10:length(data1)].*1/sampleFreq, 'ydata',data1(1:10:end));
任何帮助将不胜感激
答案 0 :(得分:1)
我不知道它会加快绘图的速度,或者如果那将是缓慢的部分,但我肯定会将轴设置和绘图的静止部分移动到while循环之外。然后使用图表的句柄来更新它(沿着你使用set
函数的位置)。
我发现更容易实际只是delete图中的特定情节线,然后绘制新图: 类似的东西:
% Outside while loop:
axes(handles.axes1);
plot([1 windowLength].*1/sampleFreq, [-data1Threshold - data1Threshold],'k','linewidth',2);
% Plotting the threshold line
xlim([1 windowLength].*1/sampleFreq);
ylim([-300 300]);
xlabel('Time (s)')
ylabel('Filtered signal (uV)')
hold on;
... Other setup....
while(...)
... Lots of stuff ...
if exist(handles.plot1)
delete(handles.plot1);
end
handles.plot1 = plot(...New stuff here...);
drawnow;
... Lots more stuff ...
end % while loop
我以前在运行模拟时使用过它,效果非常好。