0

我在轴上绘制这两条曲线:

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和来获取数据zSelcopyobj任何猜测在我用来将 2 条曲线绘制在一起时我可以做些什么来存储数据?

4

1 回答 1

1

发生的情况如下:
根据绘图中的行数,brushedData将超过代码中当前硬连线的大小1。因此,除非您从第一行刷数据,Psel并且zSel将为空,因为brushedData{1}将仅包含NaN- 并且您要选择的数据在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

根据您从中选择数据的行,某些单元格会出现PselzSel显示为空。我选择使用单元格,因为它允许您从不同的行中选择不同数量的点。

于 2013-06-28T17:47:22.913 回答