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});

然后可以将回调函数更改为如下所示。(注意:我删除了 Z 坐标,因为问题只提到了 X 和 Y。)

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 回答