4

いくつかのプロットを含むグラフがあり、それぞれが異なるソース ファイルから取得されています。(X,Y) とソース ファイルの名前を教えてくれるデータ ヒントが必要です。長い間、私の最善の試み(成功せずに)はこれです:

dcm = datacursormode(gcf);
datacursormode on;
set(dcm,'UpdateFcn',[@myfunction,{SourceFileName}]);

myfunctionは、この場合に使用されるデフォルトの関数です。このメッセージの最後に貼り付けられ、ここで説明されています: http://blogs.mathworks.com/videos/2011/10/19/tutorial-how-to-make- a-custom-data-tip-in-matlab/ 最後に、SourceFileName はソース ファイルの名前を含む文字列です。

これを行うためのより簡単な(または正しい)方法を知っている人はいますか?

前もって感謝します。

function output_txt = myfunction(~,event_obj)
% Display the position of the data cursor
% obj          Currently not used (empty)
% event_obj    Handle to event object
% output_txt   Data cursor text string (string or cell array of strings).

pos = get(event_obj,'Position');
output_txt = {['X: ',num2str(pos(1),4)],...
    ['Y: ',num2str(pos(2),4)]};

% If there is a Z-coordinate in the position, display it as well
if length(pos) > 2
    output_txt{end+1} = ['Z: ',num2str(pos(3),4)];
end

end
4

2 に答える 2

3
p=plot( x,y);
setappdata(p,'sourceFile_whatever', SourceFileName)  

dcm = datacursormode(gcf);
datacursormode on;
set(dcm, 'updatefcn', @myfunction)

そしてコールバック関数で:

function output_txt = myfunction( obj,event_obj)
% Display the position of the data cursor
% obj          Currently not used (empty)
% event_obj    Handle to event object
% output_txt   Data cursor text string (string or cell array of strings).
% event_obj

dataIndex = get(event_obj,'DataIndex');
pos = get(event_obj,'Position');

output_txt = {[ 'X: ',num2str(pos(1),4)],...
    ['Y: ',num2str(pos(2),4)]};

try
    p=get(event_obj,'Target');
    output_txt{end+1} = ['SourceFileName: ',getappdata(p,'sourceFile_whatever')];
end


% If there is a Z-coordinate in the position, display it as well
if length(pos) > 2
    output_txt{end+1} = ['Z: ',num2str(pos(3),4)];
end
于 2013-01-28T16:14:17.943 に答える
0

私はゲームに少し遅れていますが、誰かがこの質問に出くわし、それでも役に立つと思った場合に備えて答えると思いました.

変化する

set(dcm,'UpdateFcn',[@myfunction,{SourceFileName}]);

set(dcm,'UpdateFcn',{@myfunction,SourceFileName});

次に、コールバック関数を次のように変更できます。(注: 質問で X と Y のみが言及されていたため、Z 座標を削除しました。)

function output_txt = myfunction(~,event_obj,filename)
% Display the position of the data cursor
% obj          Currently not used (empty)
% event_obj    Handle to event object
% filename     Name of the source file (string)
% output_txt   Data cursor text string (string or cell array of strings).

pos = get(event_obj,'Position');
output_txt = {['X: ',num2str(pos(1),4)],...
    ['Y: ',num2str(pos(2),4)],...
    ['Source: ',filename]};

end

明らかに、文字列を別の形式にしたい場合に備えて、コールバック関数内の書式設定で何でもできます。

関数シグネチャを変更し、set(dcm,...一致するように行を更新するだけで、任意の数の引数をコールバック関数に追加できます (追加の引数は{}、コンマで区切られた の中に入れます)。これは R2013a で機能します (後で想定します) が、以前のバージョンでは試していません。

編集:コールバック関数は、それを使用するコードと同じファイルで定義する必要がある場合もあります。

于 2014-03-12T17:16:03.600 に答える