1

在 Matlab 2012a 中,我从以前的代码生成了一个数字,它是 SSI 作为年龄的函数。我想通过更新我自己的函数而不是默认函数来自定义数据提示。我知道如何更改 x 和 y,现在我有了 Age 和 SSI。但是,我有另一条信息 -subjectID- 我想将其添加到显示文本中。通过单击每个点,我希望数据提示显示相应数据点的年龄、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));

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

4

1 回答 1

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

希望有帮助。

于 2013-03-21T01:44:31.010 回答