Добавление дополнительной информации в точки данных на графике
НИЖЕ РЕШЕНИЕ!
Это значение (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.