此图中有30行,每行对应一个特定对象。现在我想显示所有对象的名称。但我不想要一个带有30个条目的混乱传奇。
我想要的是能够将光标悬停在任何一行(或使用数据光标),然后它的对象名称应该出现。
这可以在Matlab中完成。谢谢!
答案 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_fcn
和clear_text
为nested functions,因此他们都可以访问hText
并能够修改它。