2011-12-20 11 views
2

Мне нужно проанализировать много данных, для этого я определил несколько классификаторов данных. Я хочу что-то сделать, если я щелкнул курсором данных в точке на графике, он сохранит точку и вычитает ее из следующего. Чтобы я мог найти максимальную вершину синуса. Как y2-y1.Matlab автоматизирует анализ графиков с использованием datacursormode

Я нашел следующий код для извлечения очков. Только это функция, которая вызывается каждый раз и не имеет памяти.

function out = getIndex(obj,event_obj,X,Y) 
pos = event_obj.Position; 
d1 = (X-pos(1)).^2 + (Y-pos(2)).^2; 
[ignore index] = min(d1); 
out = {sprintf('X: %f',pos(1)),... 
sprintf('Y: %f',pos(2)),... 
sprintf('Index: %d',index)}; 
% disp(pos(1)) 
% pos(1) 
pos(2) 
save pos.mat pos 

В Matlab вы можете проверить с:

X = 1:10; 
Y = rand(1,10); 
plot(X, Y) 

Вы можете применить вышеуказанную функцию, которая будет использоваться с datacursormode с помощью:

dcm = datacursormode(gcf); 
set(dcm, 'UpdateFcn', @(x,y)getIndex(x,y,X,Y)) 

ответ

0

Я рекомендую использовать другой способ здесь , Вместо установки обратного вызова для курсора данных установите обратный вызов непосредственно для графика. Извлечь (X, Y) путем запроса осей CurrentPoint.

функция so2()
figure();
a = axes();
x = -10: 0.01: 10;
sx = sin (x);
h = plot (x, sx);
set (h, 'ButtonDownFcn', {@ Click_CallBack a});

конец

функция Click_CallBack (ч, е, а)
точка = получить (а, 'CurrentPoint'); x = точка (1);
y = point (4);
fprintf (1, 'X, Y =% .2f,%. 2f \ n', x, y);
конец

+0

Спасибо! (извините за многие изменения, форматирование кода не работает каким-то образом ...) – user408041

+0

Поскольку я не мог отформатировать какой-либо код в ответе, мне как-то пришлось сделать из него новый вопрос. См. здесь: http: /stackoverflow.com/q/8702342/408041 – user408041