2014-05-13 46 views
0

Matlab有ginput用于获取您在图上点击的位置的(x,y)值。但是,假设我绘制了一个带有plot(t, sin(2*pi*t))的图表。我希望能够让光标在实际情节中移动,通过点击它,我可以得到我的情节的(x,y)坐标(在这种情况下,时间和正弦值)。Matlab通过点击获得(x,y)值图

这可能吗?

+0

游标如何知道该行?你如何告诉MatLab点击鼠标?你考虑过AutoIT或AutoHotKey吗? – EngrStudent

回答

3

当MATLAB数字是开放的,你可以使用数据光标工具,以帮助您通过穿越的情节。

这里有一个简单的例子:

t = 0 : 0.01 : 10; 
plot(t, sin(t)); 

这里是你的阴谋是什么样子,我也强调了,在那里你可以点击数据光标工具的选项。

enter image description here

一旦你点击数据光标选项,点击任意位置上的情节,它会给你一个数据光标提示。在这一点上,你选择,它显示了xy坐标。在你的情况下,x表示时间,y表示振幅。

enter image description here

一旦你有一个数据光标尖那里,点击它(黑方块)并拖动它沿着曲线。您将看到数据光标提示更新并沿曲线移动。从你的问题来看,我相信这就是你要找的。

请注意,数据光标提示仅适用于您绘制的点。它不在插值在点之间。因此,如果您想要更精细的分辨率,请在开始点和结束点之间选择更小的步长。

另外,如果你想知道您的一点是确切的指标,情节只是振幅值本身:

plot(sin(t)); 

x轴将绘制每个点的指数,而不是时间值。然后,您可以使用数据光标提示来定位您想要的索引,然后执行您在上面的注释中指定的索引。换句话说:

enter image description here

这告诉我们,在指数304,它为我们提供了一个0.1114价值y。然后,您可以执行t(304)来查找幅度为0.1114时的实际时间值。

1
h = plot(t, sin(2*pi*t)); %// get a handle to the graph 
[x, ~] = ginput(1); %// y from ginput not wanted; it will be read from the graph 
y = interp1(get(h,'XData'), get(h,'YData'), x); %// interpolate the graph for y 
+0

这并没有给我确切的价值。我需要找到确切的价值(或指数)。我希望能够最终拥有t(tStart:tEnd)',其中'tStart'和'tEnd'来自图中的数据选择 – Kousha

+0

一旦你从'ginput'得到'x',你就可以找到最接近的点't'使用:'[〜,xI] = min(abs(tx));'然后't(xI)'是您点击的最近点。 – David