Добавление дополнительной информации в точки данных на графике

НИЖЕ РЕШЕНИЕ!

Это значение (x,y) фактически соответствует значению at, которое я хочу видеть на графике. Что я могу сделать?

Очевидно, что Matlab имеет возможность отображать множественную информацию в поле ввода данных:

просто назовите его как "TimePlot(x,y,t)", и он будет работать. Этот код, я считаю, также иллюстрирует несколько ключевых моментов в изменении подсказок к данным.

function  TimePlot( varargin )
x=varargin{1};
y=varargin{2};
t=varargin{nargin};
fh=figure;
plot(varargin{1:nargin-1})

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).




pos = get(event_obj,'Position');

ind=intersect(Find(x,pos(1),1e-10),Find(y,pos(2),1e-10));
if(length(ind)~=1)
    text='err';
else
    text=num2str(t(ind),4);
end

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

% 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

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



end

function [ out ] = Find( vector, value ,precision)

if nargin < 3
    precision =   0.0001;
end

out=[];

for i=1:length(vector)
    
    if(abs(vector(i)-value)<precision)
        out=[out i];
    end

end

end

2 ответа

Решение

В MATLAB Central вы можете найти обширный видеоурок о том, как создавать собственные подсказки данных: Учебник: Как создать пользовательскую подсказку данных в MATLAB.

Если вы используете стандартную подсказку данных в MATLAB, она аннотирует значения X и Y точки данных. Это видео покажет, как настроить информацию, отображаемую в подсказке к данным.

В документации о datacursormode вы найдете еще несколько примеров (следующие все скопированы из doc):

В этом примере включается режим курсора данных на текущем рисунке и устанавливаются параметры режима курсора данных. Следующие заявления

  • Создать график
  • Переключить режим курсора данных на
  • Получите объект режима курсора данных, задайте параметры подсказки данных и получите дескриптор строки, которую занимает подсказка данных:
fig = figure;
z = peaks;
plot(z(:,30:35))
dcm_obj = datacursormode(fig);
set(dcm_obj,'DisplayStyle','datatip',...
    'SnapToDataVertex','off','Enable','on')

disp('Click line to display a data tip, then press Return.')
% Wait while the user does this.
pause 

c_info = getCursorInfo(dcm_obj);
% Make selected line wider
set(c_info.Target,'LineWidth',2)

введите описание изображения здесь

В этом примере показано, как настроить текст, отображаемый курсором данных. Например, вы можете заменить текст, отображаемый в подсказке данных и окне данных (x: и y:), на Time: и Amplitude:, создав простую функцию обновления.

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

Сохраните этот код как doc_datacursormode.m:

function doc_datacursormode % Plots graph and sets up a custom data tip update function 
fig = figure; 
a = -16; 
t = 0:60; 
plot(t,sin(a*t)) 
dcm_obj = datacursormode(fig); 
set(dcm_obj,'UpdateFcn',@myupdatefcn)

Сохраните следующий код как myupdatefcn.m в пути MATLAB:

function txt = myupdatefcn(empt,event_obj) % Customizes text of data tips

pos = get(event_obj,'Position'); txt = {['Time: ',num2str(pos(1))],...
          ['Amplitude: ',num2str(pos(2))]};

Чтобы настроить и использовать функцию обновления, введите:

doc_datacursormode

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

введите описание изображения здесь

Я не думаю, что вы можете увидеть значение третьего измерения в двухмерном графике. Можете ли вы попробовать сделать surf(x,y,t) или plot3(x,y,t), чтобы получить трехмерный график и при правильной ориентации вы можете получить требуемый график и все необходимые значения x, y и t.

Другие вопросы по тегам