仅在光标在其上时显示绘图信息 - Matlab

时间:2016-12-30 05:19:38

标签: matlab matlab-figure

我有这样的情节 enter image description here

此图中有30行,每行对应一个特定对象。现在我想显示所有对象的名称。但我不想要一个带有30个条目的混乱传奇。

我想要的是能够将光标悬停在任何一行(或使用数据光标),然后它的对象名称应该出现。

这可以在Matlab中完成。谢谢!

1 个答案:

答案 0 :(得分:1)

实现在对象上悬停时出现的文本是可行的,但可能非常复杂。这需要为你的数字设置WindowButtonMotionFcn callback,这将持续检查数字的CurrentPoint property,以确定它是否在您感兴趣的轴内,如果是,那么请检查CurrentPoint property轴和计算哪个子绘图对象是最接近的。

如果您愿意允许用户点击而不只是悬停以显示文字,那就更简单了。您可以设置每个绘制线的ButtonDownFcn callback以显示给定位置的文本。这是一个创建两个线对象的示例,并为它们分配一个回调函数,该函数将显示在光标点处单击的行的Tag

function line_click_example

  hAxes = axes('NextPlot', 'add', 'ButtonDownFcn', @clear_text);
  hLines = line(hAxes, [1:10; 1:10].', [rand(10, 1) rand(10, 1)+1]);
  set(hLines, 'ButtonDownFcn', @line_click_fcn, ...
              'Tag', {'Line 1'; 'Line 2'});
  hText = text(hAxes, 0, 0, '');

  function line_click_fcn(hSource, ~)
    cursorPosition = get(get(hSource, 'Parent'), 'CurrentPoint');
    set(hText, 'Position', cursorPosition(1, [1 2]), ...
               'String', get(hSource, 'Tag'));
  end

  function clear_text(~, ~)
    set(hText, 'Position', [0 0], 'String', '');
  end

end

在这里,我还设置了轴的ButtonDownFcn,以便它清除文本对象,这意味着单击轴上任何不在两条线之一上的区域将删除显示文字。另请注意,由于line_click_fcnclear_textnested functions,因此他们都可以访问hText并能够修改它。