Matlab使用datacursormode自动分析图形

时间:2011-12-20 15:53:23

标签: matlab matlab-figure

我必须分析很多数据,为此我定义了几个数据分类器。如果我点击数据光标在图表上的一个点上它存储点并从下一个点中减去它,我想制作一些数据。这样我才能找到正弦峰值到峰值。像y2-y1。

我找到了以下代码来提取点数。只有它是每次调用的函数,没有内存。

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

1 个答案:

答案 0 :(得分:0)

我建议在这里使用另一种方式。不是为数据光标设置回调,而是直接为绘图设置回调。 通过查询轴'CurrentPoint'来提取(X,Y)。

  

功能so2()
     图();
     a = axes();
     x = -10:0.01:10;
     sx = sin(x);
     h = plot(x,sx);
     set(h,'ButtonDownFcn',{@ Click_CallBack a});

     

     

功能Click_CallBack(h,e,a)
     point = get(a,'CurrentPoint');      x =点(1);
     y =点(4);
     fprintf(1,'X,Y =%。2f,%。2f \ n',x,y);
  端