1

Matlab 2012a では、年齢の関数として SSI である以前のコードから図を生成しました。デフォルトの関数ではなく、独自の関数を更新して datatip をカスタマイズしたいと考えています。私は 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をプロットに取り込む

関数呼び出しで、入力パラメーターの1つとしてSubjectIDがあることに気付きました。ただし、それを使用する次の行で値が割り当てられるため、使用されることはないようです。書かれているように、これは更新関数が呼び出されるたびにExcelファイルから読み取られます。load-from-excelの部分を、データが最初にロードされるコードの同じセクションに移動することをお勧めします。SubjectIDがテキストであると仮定すると、時系列のUserData変数に格納できます。これにより、次の作業が行われます。

答えへ

したがって、SubjectID情報を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行を取り除くことができます。

お役に立てば幸いです。

于 2013-03-21T01:44:31.010 に答える