的曲线上有该图30线和每行对应于特定的对象。现在我想显示所有对象的名称。但我不想要一个有30个条目的混乱的传说。
我想要的是能够将光标悬停在任何行(或使用数据光标),然后它应该出现对象的名称。
这是可能做到的Matlab。谢谢!
的曲线上有该图30线和每行对应于特定的对象。现在我想显示所有对象的名称。但我不想要一个有30个条目的混乱的传说。
我想要的是能够将光标悬停在任何行(或使用数据光标),然后它应该出现对象的名称。
这是可能做到的Matlab。谢谢!
执行文本时出现在对象上悬停是可行的,但可以相当参与。这将需要为你的图形设置一个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
并且能够修改它。