Matlab中光标的定制

Matlab中光标的定制,matlab,cursor,interactive,Matlab,Cursor,Interactive,在Matlab 2012a中,我根据以前的代码生成了一个图形,该图形是SSI随年龄变化的函数。 我想通过更新自己的函数而不是默认函数来定制datatip。我知道如何改变x和y,现在我有了它们的年龄和SSI。然而,我还有另一条信息——subjectID——我想添加到显示文本中。 通过单击每个点,我希望datatip显示相应数据点的年龄、SSI和主题ID。 这就是我现在拥有的: matlab是我SSI时代保存下来的工作场所 function output_txt = myupdatefcn(obj,

在Matlab 2012a中,我根据以前的代码生成了一个图形,该图形是SSI随年龄变化的函数。 我想通过更新自己的函数而不是默认函数来定制datatip。我知道如何改变x和y,现在我有了它们的年龄和SSI。然而,我还有另一条信息——subjectID——我想添加到显示文本中。 通过单击每个点,我希望datatip显示相应数据点的年龄、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));

显然,这是不对的。谁能帮帮我吗?谢谢。

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

首先,快速离题:让主体进入你的情节 我注意到,在函数调用中,您将subject作为输入参数之一。但是,它似乎永远不会被使用,因为使用它的下一行为它赋值。 如前所述,每次调用update函数时,都会从excel文件中读取。您可能希望将加载从excel部分移动到第一次加载数据的代码段中。如果我假设SubjectID是文本,那么可以将其存储在timeseries的UserData变量中。这将使以下工作得以开展:

继续寻找答案 因此,如果您在userdata中包含您的主体信息,当您第一次这样绘制时:

% ...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个值都是可访问的

希望有帮助