我有一个收集刷新数据的函数(以ActionPostCallback的形式)。该函数按预期运行:当我突出显示给定轴的区域时,它存储突出显示数据的xmin和xmax。但是,有时我会在轴上的一大块数据周围绘制一个红色矩形,以引起对该数据的注意。如果我将该矩形绘制在轴上,然后尝试在同一轴上刷其他数据,则会收到回调错误。
EDIT2 经过进一步研究,我发现了代码的麻烦。 function annotateSelectedRegion
中的一行:
selectedData = currentSelection.Children
当有多个子节点时,会导致代码崩溃,在这种情况下是绘制的矩形和绘制的线。有没有办法区分矩形和绘制线?或者是我在执行函数之前删除矩形的最佳方法。
警告:模式回调期间发生错误。
在matlab.uitools.internal.uimode / fireActionPostCallback(第16行)
在datamanager / brushup(第117行)
在%522823425> @(es,ed)datamanager.brushup(es,ed)
在hgfeval(第62行)
在matlab.uitools.internal.uimode / modeWindowButtonUpFcn(第55行)
在 matlab.uitools.internal.uimode / modeControl> localModeWindowButtonUpFcn (第161行)
粗矩形是绘制的矩形,细长矩形是刷牙工具。这是 产生错误的方案的屏幕截图。
矩形图代码
function displayPrevAnnotation(obj, selectedAxes, rangeStart, rangeEnd)
if strcmp(selectedAxes, 'Raw')
axes(obj.rawDataDisplayAxes);
boxWidth = rangeEnd - rangeStart;
yLimits = obj.rawDataDisplayAxes.YLim;
boxHeight = yLimits(2) - yLimits(1);
obj.focusBox = rectangle('Position', [rangeStart, yLimits(1), boxWidth, boxHeight]); hold off;
elseif strcmp(selectedAxes, 'PSD')
axes(obj.psdDataDisplayAxes);
boxWidth = rangeEnd - rangeStart;
yLimits = obj.psdDataDisplayAxes.YLim;
boxHeight = yLimits(2) - yLimits(1);
obj.focusBox = rectangle('Position', [rangeStart, yLimits(1), boxWidth, boxHeight]); hold off;
end
obj.focusBox.LineWidth = 3;
obj.focusBox.EdgeColor = 'red';
end
拉丝数据收集功能
function annotateSelectedRegion(obj, ~, eventdata)
currentSelection = eventdata.Axes;
selectedData = currentSelection.Children;
if isempty(selectedData) || ~any(selectedData.BrushData(:))
% Do nothing
disp('please select data or load data');
elseif ~isempty(selectedData.BrushData)
brushedIdx = logical(selectedData.BrushData);
brushedXData = selectedData.XData(brushedIdx);
brushedYData = selectedData.YData(brushedIdx);
obj.t1 = brushedXData(1);
obj.t2 = brushedXData(end);
fillRecPairInfo(obj);
fillAnnotIDInfo(obj);
fillUniqueIDInfo(obj);
fillAnnotRangeInfo(obj, currentSelection);
annotationPopUp;
end
end
答案 0 :(得分:0)
注意: 此解决方案最适用于我的情况,我不确定它对其他人有多大用处。但无论如何,这是我的解决方案。正如我在问题中所述,我意识到函数" annotateSelectedRegion
"由于存在两个孩子(矩形和绘制的线)而感到困惑。在函数" displayPrevAnnotation
"中,我只需设置" HandleVisibility
"矩形的属性为" off
"。通过这样做,父节点不再可见矩形,在这种情况下,轴是因此它看到的唯一子节点是绘制的线。