用于对数据进行分类的交互式绘图



我正在处理3个矩阵(Data1、Data2、Data3(,其中3个矩阵中的每一个矩阵的每一行都是来自同一时间的信号。我正在尝试一个交互式UI,如果有异常或没有,用户可以点击它。代码应该记录切换开关的答案,并绘制接下来的3张图,直到没有更多数据为止。我有两个主要问题:

按下切换按钮时,它将保持切换状态,直到再次按下以在按下下一个答案之前取消切换。它应该不匹配--

记录的答案"Result"在每次迭代中都会被删除,我不知道为什么!

Results = table();
for ii = 1:10

pushbuttonPlot(Data1,Data2,Data3,ii)
waitforbuttonpress
end

功能如下:

function Results = pushbuttonPlot(Data1,Data2,Data3,ii)
f = figure(1);
c = uicontrol('Position',[10 60 60 22]); %left, bottom, width, height
c.String = 'JOINT!!';
c.Callback = @plotJointNext;
c2 = uicontrol('Position',[11+140 60 60 22]);
c2.String = 'NoJOINT!!';
c2.Callback = @plotNoJointNext;
waitforbuttonpress
Results =

function  plotJointNext(src,event)
figure(1)
subplot(3,1,1)
ylabel('Height (mm)')
plot(Data1((ii),:))
title(['AOI 1, Index # ',num2str((ii))])
xlabel('Data Points (px)')

subplot(3,1,2)
plot(Data2((ii),:))
ylabel('Height (mm)')
title(['AOI 2, Index # ',num2str((ii))])            
xlabel('Data Points (px)')

subplot(3,1,3)
plot(Data3((ii),:))
ylabel('Height (mm)')            
title(['AOI 3, Index # ',num2str((ii))])
xlabel('Data Points (px)')  
temp = 1  ;
Results = [Results ; temp];

end

function  plotNoJointNext(src,event)

figure(1)
subplot(3,1,1)
ylabel('Height (mm)')
plot(Data1((ii),:))
title(['AOI 1, Index # ',num2str((ii))])
xlabel('Data Points (px)')

subplot(3,1,2)
plot(Data2((ii),:))
ylabel('Height (mm)')
title(['AOI 2, Index # ',num2str((ii))])         
xlabel('Data Points (px)')

subplot(3,1,3)
plot(Data3((ii),:))
ylabel('Height (mm)')            
title(['AOI 3, Index # ',num2str((ii))])
xlabel('Data Points (px)')    
temp = 0  ;
Results = [Results ; temp];

end
end

我无法让代码按照我希望的方式工作,所以我做了以下调整:该函数有一个ii=ii+1,所以我避免在for循环中运行主函数。这起到了帮助作用,因为waitforkey不允许uibutton不切换。第二件事是我创建了一个全局变量Results,它记录了某个按钮被按下的所有次数。也许有更好的方法可以做到这一点,但我就是这样做的。

最新更新