Matlab:如何将鼠标单击(使用'ButtonDownFcn')从绘图保存到工作区中的多个变量点?
Matlab: How to save multiple variable points from mouse click (with 'ButtonDownFcn') from a plot into the workspace?
我有一个添加了一些垂直线的图形,例如:
figure
x = rand(1,41);
y = 1:41;
H(1)= plot(x,y,'r.');
H(2)= line([x(21) x(21)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(3)= line([x(3) x(3)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(4)= line([x(15) x(15)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
我希望能够用鼠标按钮点击行,并存储每一个点击的行索引。
以下脚本有效,但我不知道如何将每个索引存储在数组中。 'IndInWorkSpace' 每次点击都会不断变化。
set(H, 'ButtonDownFcn', {@LineSelected, H})
function [indices] = LineSelected(ObjectH, H)
set(ObjectH, 'LineWidth', 4);
set(H(H ~= ObjectH), 'LineWidth', 2);
% Get x and y data of the highlighted lines
ind = ObjectH.XData
assignin('base','IndInWorkSpace',ind);
end
任何帮助将不胜感激!谢谢!
一个简单的解决方法是首先检查是否已在基础工作区中找到索引。如果已经有一个变量IndInWorkSpace
,附加到它,否则分配一个新变量。
function LineSelected(ObjectH, H)
set(ObjectH, 'LineWidth', 4);
set(H(H ~= ObjectH), 'LineWidth', 2);
% Get x and y data of the highlighted lines
ind = ObjectH.XData;
if evalin('base','exist(''IndInWorkSpace'',''var'')')
indArray = evalin('base','IndInWorkSpace');
indArray(end+1) = ind;
else
indArray = ind;
end
assignin('base', 'IndInWorkSpace', indArray);
end
我有一个添加了一些垂直线的图形,例如:
figure
x = rand(1,41);
y = 1:41;
H(1)= plot(x,y,'r.');
H(2)= line([x(21) x(21)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(3)= line([x(3) x(3)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
H(4)= line([x(15) x(15)],[0 max(y)], 'LineWidth', 2, 'Color', 'k');
我希望能够用鼠标按钮点击行,并存储每一个点击的行索引。 以下脚本有效,但我不知道如何将每个索引存储在数组中。 'IndInWorkSpace' 每次点击都会不断变化。
set(H, 'ButtonDownFcn', {@LineSelected, H})
function [indices] = LineSelected(ObjectH, H)
set(ObjectH, 'LineWidth', 4);
set(H(H ~= ObjectH), 'LineWidth', 2);
% Get x and y data of the highlighted lines
ind = ObjectH.XData
assignin('base','IndInWorkSpace',ind);
end
任何帮助将不胜感激!谢谢!
一个简单的解决方法是首先检查是否已在基础工作区中找到索引。如果已经有一个变量IndInWorkSpace
,附加到它,否则分配一个新变量。
function LineSelected(ObjectH, H)
set(ObjectH, 'LineWidth', 4);
set(H(H ~= ObjectH), 'LineWidth', 2);
% Get x and y data of the highlighted lines
ind = ObjectH.XData;
if evalin('base','exist(''IndInWorkSpace'',''var'')')
indArray = evalin('base','IndInWorkSpace');
indArray(end+1) = ind;
else
indArray = ind;
end
assignin('base', 'IndInWorkSpace', indArray);
end