Matlab автоматизирует анализ графиков с помощью datacursormode

Мне нужно проанализировать много данных, для этого я определил несколько классификаторов данных. Я хочу сделать что-то, что если я нажму курсором данных на точку на графике, он сохранит точку и вычитает ее из следующей. Чтобы я мог найти пиковую высоту синуса. Как у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)

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

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

person user408041    schedule 20.12.2011    source источник


Ответы (1)


Я рекомендую использовать другой способ здесь. Вместо установки обратного вызова для курсора данных установите обратный вызов непосредственно для графика. Извлеките (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});

конец

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

person Andrey Rubshtein    schedule 20.12.2011
comment
Спасибо! (извините за много правок, форматирование кода как-то не работает...) - person user408041; 02.01.2012
comment
Поскольку я не мог отформатировать какой-либо код в ответе, мне пришлось сделать из него новый вопрос. См. Здесь: stackoverflow.com /q/8702342/408041 - person user408041; 02.01.2012