我在轴上绘制这两条曲线:
LH(1) = copyobj(T2pb1hLine(2), S.T2pb1Ax(2));
LH(2) = copyobj(T2pb1hLine(2), S.T2pb1Ax(2));
set(LH(1), 'XData', PressNoOutliers, 'YData', zNoOutliers, 'linestyle',...
'x', 'Color', 'm');
set(LH(2), 'XData', PressNoOutliers2, 'YData', zNoOutliers2, 'linestyle',...
's', 'Color', 'b');
然后我使用这个回调函数来刷数据并存储它:
brush on
pause
hBrushLine = findall(S.T2pb1Ax(2), 'tag', 'Brushing');
brushedData = get(hBrushLine, {'Xdata', 'Ydata'});
brushedIdx = ~isnan(brushedData{1});
PSel = brushedData{1}(brushedIdx);
zSel = brushedData{2}(brushedIdx);
我能够刷数据,但是,没有存储数据导致PSel
和zSel
的空向量。显然,如果我没有使用copyobj
并仅绘制单曲线,那么我可以通过刷新PSel
和zSel
来获取数据。当我使用copyobj
将2条曲线绘制在一起时,有什么猜测我可以做什么来存储数据?
答案 0 :(得分:1)
发生了什么:
根据图中的行数,brushedData
将超出代码中当前硬连线大小1
的大小。因此,除非您从第一行刷过数据,否则Psel
和zSel
将为空,因为brushedData{1}
只会包含NaN
- 您要选择的数据位于{ {1}}(对应于brushedData{n}
- 行),但从未被处理过。这是一个小例子(你必须调整n
和这样的句柄,但逻辑变得清晰了):
gca
根据您选择数据的行,x1 = linspace(1,10,21);
y1 = rand(1,21);
x2 = x1;
y2 = rand(1,21);
x3 = x2;
y3 = rand(1,21);
h(1) = plot(x1,y1,'b');
h(2) = copyobj(h(1),gca);
h(3) = copyobj(h(1),gca);
set(h(2),'XData',x2,'YData',y2,'Color','r')
set(h(3),'XData',x3,'YData',y3,'Color','g')
brush on
pause
hBrushLine = findall(gca, 'tag', 'Brushing');
brushedData = get(hBrushLine, {'Xdata', 'Ydata'});
for I=1:size(brushedData,1)
brushedIdx = ~isnan(brushedData{I,1});
PSel{I} = brushedData{I,1}(brushedIdx);
zSel{I} = brushedData{I,2}(brushedIdx);
end
和Psel
中的某些单元格显示为空。我选择使用单元格,因为它允许您从不同的行中选择不同数量的点。