2016-12-30 187 views
1

我有这样 enter image description here只有当光标位于显示它情节信息 - Matlab的

的曲线上有该图30线和每行对应于特定的对象。现在我想显示所有对象的名称。但我不想要一个有30个条目的混乱的传说。

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

这是可能做到的Matlab。谢谢!

回答

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并且能够修改它。

相关问题