2015-07-06 4 views
1

В некоторых ситуациях было бы удобно, чтобы в datapoint отображалось соответствующее имя записи в дополнение к значениям x и y.Показать текст легенды Matlab в datatip

Как я могу заставить Matlab отобразить соответствующий текст легенды в datatip построенного datapoint?

ответ

6

Вы можете настроить данные, указанные в этом типе данных, с помощью специального программного обеспечения UpdateFcn.

Пример:

fh = figure; 
plot(rand(10,2)); 
legend('foo', 'bar'); 

datacursormode on; 
dcm = datacursormode(fh); 
set(dcm,'UpdateFcn',@customdatatip) 

customdatatip.m

function output_txt = customdatatip(obj,event_obj,str) 
pos = get(event_obj, 'Position'); 
output_txt = {... 
    ['X: ', num2str(pos(1),4)]... 
    ['Y: ', num2str(pos(2),4)] ... 
    ['legend: ', event_obj.Target.DisplayName]... 
}; 

выход

enter image description here

+1

Свойство DisplayName представляет собой пустую строку до тех пор, пока не будет создана легенда. После его установки остается даже, если легенда скрыта, что приятно в некоторых ситуациях. – Erik

0

Можно создать пользовательскую функцию для создания текста данных. Легкий способ щелкнуть правой кнопкой мыши на сюжете и выбрать «Выбрать-» или «Изменить функцию обновления текста».

Функция получает объект-событие, чье свойство «Target» является дескриптором щелкнутых данных. При использовании легенд текст сохраняется в свойстве «DisplayName» этих данных.

Вот реализация:

function output_txt = legendtip(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). 


try 
    p = get(event_obj,'Target'); 
    legendtext = get((get(event_obj,'Target')),'DisplayName'); 
catch err 
    disp(err.message) 
end 

pos = get(event_obj,'Position'); 

if ~isempty(title) 
    output_txt = {legendtext ,... 
     ['X: ' num2str(pos(1),4)],... 
     ['Y: ' num2str(pos(2),4)]}; 
else 
    output_txt = {['X: ' num2str(pos(1),4)],... 
     ['Y: ' num2str(pos(2),4)]}; 
end 

Проверено на 2014b.

Смежные вопросы