在Matlab中自定义光标

时间:2013-03-11 16:35:46

标签: matlab cursor interactive

在Matlab 2012a中,我从之前的代码生成了一个数字,即SSI作为年龄的函数。 我想通过更新自己的函数而不是默认函数来自定义数据提示。我知道如何改变x和y,现在我有了Age和SSI。但是,我还有另一条信息-subjectID-我要添加到显示文本中。 通过点击每个点,我希望datatip显示相应数据点的Age,SSI和主题ID。 这就是我现在拥有的: matlab是我SSI年龄的保存工作场所。

function output_txt = myupdatefcn(obj,event_obj,...
                  matlab,labels,SubjectID)
pos = get(event_obj,'Position');
x = pos(1); 
y = pos(2);
[~, ~, raw0_0] = xlsread('Data.xlsx','CONTROLS','A2:A106');
raw = [raw0_0];
SubjectID = cell2mat(raw);
output_txt = {['AGE: ',num2str(pos(1),4)],...
    ['SSI: ',num2str(pos(2),4)],...
    ['SubjectID: ',SubjectID]};
idx = find(matlab == x,1);  
[row,col] = ind2sub(size(matlab),idx);
output_txt{end+1} = cell2mat(labels(row));

显然,这是不对的。有人可以帮帮我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果我正确阅读了您的代码,我会做出以下假设(可能不正确): * subjectID是包含字符串向量的单元格 * subjectID是点击点的X位置

首先,快速离题:将SubjectID放入你的情节

我注意到,在函数调用中,您将SubjectID作为输入参数之一。但是,它似乎永远不会被使用,因为使用它的下一行会为它赋值。 如上所述,每次调用更新函数时,都将从excel文件中读取。您可能希望将load-from-excel部分移动到首次加载数据的相同代码部分。如果我假设SubjectID是文本,则可以将其存储在时间序列的UserData变量中。这将使以下工作:

继续回答

因此,如果您在用户数据中包含您的SubjectID信息,那么当您首次绘制时如下:

% ...not shown: get the ages, SSIs and SubjectIDs ....

plot(ages, SSIs, 'UserData', SubjectIDs);   % Store SubjectIDs along with the line...

然后以下情况应该起作用 - 或者至少让你坚实。

function output_txt = myupdatefcn(obj,event_obj)   
  pos = get(event_obj,'Position');
  x = pos(1); 
  y = pos(2);
  allIDs = get(event_obj.Target,'UserData');
  thisSubject = event_obj.UserData{pos(1)};

  output_txt = {['AGE: ',num2str(pos(1),4)],...
    ['SSI: ',num2str(pos(2),4)],...
    ['SubjectID: ',thisSubject]};

您可以删除最后3行代码,因为您事先知道所有3个值都可以访问。

希望有所帮助。