2

我必须分析大量数据,为此我定义了数据的几个分类器。如果我用数据光标单击图表上的一个点,我想制作一些数据,它会存储该点并从下一个点中减去它。这样我就可以找到正弦的峰顶高度。像 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))
4

1 回答 1

0

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

函数so2()
图();
a = 轴();
x = -10:0.01:10;
sx = 罪(x);
h = 绘图(x,sx);
set(h,'ButtonDownFcn',{@Click_CallBack a});

结尾

函数 Click_CallBack(h,e,a)
点 = get(a,'CurrentPoint'); x = 点(1);
y = 点(4);
fprintf(1,'X,Y = %.2f,%.2f\n',x,y);
结尾

于 2011-12-20T16:19:47.393 回答