作为一种替代方法,您可以使用 MATLAB 的datacursormode
对象,它不会阻止您的图形窗口的缩放/平移。
一个小例子(假设 R2014b 或更新版本):
h.myfig = figure;
h.myax = axes;
plot(h.myax, 1:10);
% Initialize data cursor object
cursorobj = datacursormode(h.myfig);
cursorobj.SnapToDataVertex = 'on'; % Snap to our plotted data, on by default
while ~waitforbuttonpress
% waitforbuttonpress returns 0 with click, 1 with key press
% Does not trigger on ctrl, shift, alt, caps lock, num lock, or scroll lock
cursorobj.Enable = 'on'; % Turn on the data cursor, hold alt to select multiple points
end
cursorobj.Enable = 'off';
mypoints = getCursorInfo(cursorobj);
请注意,您可能需要在图形窗口内单击才能触发数据光标。
这里我waitforbuttonpress
用来控制我们的while
循环。正如所评论的,waitforbuttonpress
返回0
鼠标按钮单击和1
按键,但不是由Ctrl、Shift、Alt、Caps、Num或ScrLk键触发。您可以在单击的同时按住选择多个点Alt。
完成选择点后,点击任何触发键,waitforbuttonpress
然后调用 会输出数据点getCursorInfo
,这会返回包含点信息的数据结构。此数据结构包含 2 或 3 个字段,具体取决于绘制的内容。该结构将始终包含Target
,它是包含数据点的图形对象的句柄,以及Position
,它是指定光标的 x、y (和 z)坐标的数组。如果您绘制了一个line
orlineseries
对象,您还将拥有DataIndex
,它是对应于最近数据点的数据数组的标量索引。