Synchronising data tip location on three plots

30 次查看(过去 30 天)
Hi all,
I have a GUI with three axes plots. When the user uses the data tip on one graph, I want it to appear on the other two, in the same place. When one is moved, I want the others to follow. How could I do this?
I am trying to set the position of a data tip on a graph programatically, but struggling.
fig = figure;
z = peaks;
plot(z(:,30:35))
dcm_obj = datacursormode(fig);
set(dcm_obj,'DisplayStyle','datatip',...
'SnapToDataVertex','off','Enable','on')
disp('Click line to display a data tip, then press Return.')
% Wait while the user does this.
pause
c_info = getCursorInfo(dcm_obj);
% Make selected point move
c_info.Position = [2,2] % set position
How would I set the data cursors position?
Is there a better way to make data tips appear on the other two plots in my GUI, and synchronise their location?
I have found linkprop function but not sure how to use it to be honest.
Thanks,
Matt
  2 个评论
Matt
Matt 2016-10-24
Hi, Does anyone have any more thoughts on this? I am struggling to implement this! Thanks in advance, Matt.
Matt
Matt 2016-10-24
I have found this but I am unsure where to begin to adapt it for my GUI.
I would like the crosshairs and x and y coordinates though...
I have also found this, and it works very well, but you cannot drag the data tips with the mouse, and there is not a vertical crosshair that would span my three subplots

请先登录,再进行评论。

回答(2 个)

Walter Roberson
Walter Roberson 2016-10-19
It is possible to move the cursor... but I have not figured out how to control where it goes.
dcm_obj = datacursormode(fig);
then
here = dcm_obj.CurrentCursor.Position
dcm_obj.CurrentCursor.moveTo([-10,200])
there = dcm_obj.CurrentCursor.Position
I have not figured out how the argument such as [-10,200] relates to where the cursor ends up. It does seem repeatable, but I have not figured out the coordinate system.
  2 个评论
Matt
Matt 2016-10-19
编辑:Matt 2016-10-19
Thanks, that works. I thought it placed the cursor at the nearest data point but it doesn't seem to - odd.
fig = figure;
z = peaks;
plot(z(:,30:35))
dcm_obj = datacursormode(fig)
disp('Place the data cursor on graph and press enter')
pause
here = dcm_obj.CurrentCursor.Position
dcm_obj.CurrentCursor.moveTo([10,-3.7])
there = dcm_obj.CurrentCursor.Position
So... now, how can we link the position of three data tip cursors?
Walter Roberson
Walter Roberson 2016-10-19
When I used moveTo the destinations did not seem to have all that much relationship to the coordinates passed.
Perhaps you could set their UpdateFcn to move the other cursors with moveTo ?
You might also need to use dcm_obj.updateDataCursors() after
There might be a race condition -- if the moveTo triggers the update function then you don't want the other cursor's update to trigger you again...

请先登录,再进行评论。


ali amini
ali amini 2020-10-1
编辑:ali amini 2023-3-14

类别

Help CenterFile Exchange 中查找有关 Specifying Target for Graphics Output 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by