在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));
显然,这是不对的。有人可以帮帮我吗?谢谢。
答案 0 :(得分:0)
如果我正确阅读了您的代码,我会做出以下假设(可能不正确):
* subjectID是包含字符串向量的单元格
* subjectID是点击点的X
位置
我注意到,在函数调用中,您将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个值都可以访问。
希望有所帮助。