如何在Matlab中从数据提示光标中提取任意数量的数据点



我正在尝试显示一系列图形(在下面的示例代码中,为2个图形(,这样我将逐一浏览每个图形,然后单击一些点,并从光标输出点的(x,y(位置。根据一些在线帮助,我使用pause函数,单击一点,按下一个键,该键使用datacursormodegetCursorInfo函数将(x,y(数据输出到Matlab终端,然后单击下一点。我不知道我将在每个数字中选择多少分,但假设它将少于10分。因此,我使用了一个带有暂停语句的for循环(for rc1=1:10(。问题是,当我完成了较少的点数(比如说在rc1=5(并转到下一个图时,我不知道如何退出这个循环。我该怎么做?如果代码可以指示我已经完成了从当前图形中选择点,并让我脱离rc1=1:10循环(例如,if isfield ... end之后的某种if (condition) continue语句应该可以工作(。

clc
clearvars
close all
for rc2=1:2

figure;

x = linspace(0,10,150);
y = cos(5*x);
fig = gcf;
plot(x,y)
% Enable data cursor mode
datacursormode on
dcm_obj = datacursormode(fig);
% Set update function
set(dcm_obj,'UpdateFcn',@myupdatefcn)
% Wait while the user to click
disp('Click line to display a data tip, then press "Return"');

for rc1=1:10
pause
% Export cursor to workspace
info_struct = getCursorInfo(dcm_obj);
if isfield(info_struct, 'Position')
fprintf('%.2f %.2f n',info_struct.Position);
end

end

end
function output_txt = myupdatefcn(~,event_obj)
% ~            Currently not used (empty)
% event_obj    Object containing event data structure
% output_txt   Data cursor text
pos = get(event_obj, 'Position');
output_txt = {['x: ' num2str(pos(1))], ['y: ' num2str(pos(2))]};
end

好吧,我想通了。在内环中添加一个try, catch, break, end序列,并将pause, getCursorInfo, isfield段放在try段中,使其发挥了作用。现在我选择几个点,只需关闭当前图形,按下一个键,然后转到下一个图形。这很有效。

clc
clearvars
close all
for rc2=1:2

figure;

x = linspace(0,10,150);
y = cos(5*x);
fig = gcf;
plot(x,y)
% Enable data cursor mode
datacursormode on
dcm_obj = datacursormode(fig);
% Set update function
set(dcm_obj,'UpdateFcn',@myupdatefcn)
% Wait while the user to click
disp('Click line to display a data tip, then press "Return"');

for rc1=1:10
% Export cursor to workspace
try
pause
info_struct = getCursorInfo(dcm_obj);
if isfield(info_struct, 'Position')
fprintf('%.2f %.2f n',info_struct.Position);
end
catch
break;
end
end

end
function output_txt = myupdatefcn(~,event_obj)
% ~            Currently not used (empty)
% event_obj    Object containing event data structure
% output_txt   Data cursor text
pos = get(event_obj, 'Position');
output_txt = {['x: ' num2str(pos(1))], ['y: ' num2str(pos(2))]};
end

相关内容

  • 没有找到相关文章

最新更新