MATLAB GUI更新图

时间:2015-05-15 22:47:36

标签: matlab user-interface plot

我有一个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));

任何帮助将不胜感激

1 个答案:

答案 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

我以前在运行模拟时使用过它,效果非常好。