Matlab, автоматизирующий анализ графов с использованием datacursormode - PullRequest
2 голосов
/ 20 декабря 2011

Мне нужно проанализировать много данных, для этого я определил несколько классификаторов данных. Я хочу сделать что-то dat, если я щелкну курсором данных по точке на графике, она сохранит эту точку и вычтет ее из следующей. Так что я могу найти пиковую высоту синуса. Как у2-у1.

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

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)

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

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

1 Ответ

0 голосов
/ 20 декабря 2011

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

function so2 ()
figure ();
a = axes ();
x = -10: 0,01: 10;
sx = sin (x);
h = plot (x, sx);
set (h, 'ButtonDownFcn', {@ Click_CallBack a});

end

function Click_CallBack (h, e, a)
point = get (a, CurrentPoint ');x = точка (1);
y = точка (4);
fprintf (1, 'X, Y =% .2f,%. 2f \ n', x, y);
конец

...