如何从 Matlab 中的数据提示游标中提取任意数量的数据点?
How to extract arbitrary number of data points from data tip cursor in Matlab?
我正在尝试显示一系列图形(在下面的示例代码中,2 个图形),这样我将一个一个地浏览每个图形并单击一些点并输出的 (x,y) 位置来自光标的点。根据一些在线帮助,我使用 pause
函数,我单击一个点,按下一个键,使用 datacursormode
和 getCursorInfo
函数将 (x,y) 数据输出到 Matlab 终端然后点击下一点。我不知道每个图中我要 select 多少分,但假设它会少于 10。因此,我正在使用 for
循环(for rc1=1:10
) 中有一个暂停语句。问题是当我完成较少数量的点(比如 rc1=5
)并移动到下一个数字时,我不知道如何退出此循环。我该怎么做呢 ?如果代码可以指示我已经完成当前图形的 selecting 点并让我跳出 rc1=1:10
循环(例如,某种 if (condition) continue
语句 if isfield ... end
应该有效)。
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
部分中使其工作。现在我select几点,干脆关闭当前图,按一个键继续下图。这行得通。
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
我正在尝试显示一系列图形(在下面的示例代码中,2 个图形),这样我将一个一个地浏览每个图形并单击一些点并输出的 (x,y) 位置来自光标的点。根据一些在线帮助,我使用 pause
函数,我单击一个点,按下一个键,使用 datacursormode
和 getCursorInfo
函数将 (x,y) 数据输出到 Matlab 终端然后点击下一点。我不知道每个图中我要 select 多少分,但假设它会少于 10。因此,我正在使用 for
循环(for rc1=1:10
) 中有一个暂停语句。问题是当我完成较少数量的点(比如 rc1=5
)并移动到下一个数字时,我不知道如何退出此循环。我该怎么做呢 ?如果代码可以指示我已经完成当前图形的 selecting 点并让我跳出 rc1=1:10
循环(例如,某种 if (condition) continue
语句 if isfield ... end
应该有效)。
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
部分中使其工作。现在我select几点,干脆关闭当前图,按一个键继续下图。这行得通。
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