【问题标题】:How to use togglebutton to turn labels in scatterplot on/off如何使用切换按钮打开/关闭散点图中的标签
【发布时间】:2019-10-16 14:12:37
【问题描述】:

我尝试为每个点创建带有标签的散点图:

现在我想让代码的用户可以打开和关闭标签。

到目前为止,我的代码如下所示:

x = rand(1,100); y = rand(1,100); pointsize = 30;
idx = repmat([1 : 10], 1, 10)             % I used class memberships here

figure(1)
MDSnorm = scatter(x, y, pointsize, idx, 'filled');
dx = 0.015; dy = 0.015;                   % displacement so the text does not overlay the data points
T = text(x + dx, y +dy, labels);
colormap( jet );                          % in my code I use a specific colormap

Button = uicontrol('Parent',figure(2),'Style','toggle','String',...
    'labels','Units','normalized','Position',[0.8025 0.82 0.1 0.1],'Visible','on',...
    'callback',{@pb_call, MDSnorm, ???});

在我的脚本结束时,我尝试定义pb_call 函数。我尝试了几个不同的版本,都失败了。

我大概知道我需要做什么。比如:

function [] = pb_call( ??? )

if get(Button, 'Value')
    T --> invisible       % ???
else
    T --> visible         % ???
end
end

如何修改上述内容以根据需要打开或关闭标签?

【问题讨论】:

    标签: matlab scatter-plot matlab-gui


    【解决方案1】:

    这是一个工作示例:

    x = rand(1,9); y = rand(1,9); pointsize = 30;
    idx = repmat(1 : 3, 1, 3);             % I used class memberships here
    
    labels = {'a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'j'};
    
    h_fig = figure(1); %Create a figure, an keep the handle to the figure.
    MDSnorm = scatter(x, y, pointsize, idx, 'filled');
    dx = 0.015; dy = 0.015;                   % displacement so the text does not overlay the data points
    T = text(x + dx, y +dy, labels);
    colormap( jet );                          % in my code I use a specific colormap
    
    %Add a button to the same figure (the figure with the labels).
    Button = uicontrol('Parent',h_fig,'Style','toggle','String',...
        'labels','Units','normalized','Position',[0.8025 0.82 0.1 0.1],'Visible','on',...
        'callback',@pb_call);
    
    
    function pb_call(src, event)
        %Callback function (executed when button is pressed).
        h_fig = src.Parent; %Get handle to the figure (the figure is the parent of the button).
        h_axes = findobj(h_fig, 'Type', 'Axes'); %Handle to the axes (the axes is a children of the figure).
        h_text = findobj(h_axes, 'Type', 'Text'); %Handle to all Text labels (the axes is the parent of the text labels).
    
        %Decide to turn on or off, according to the visibility of the first text label.
        if isequal(h_text(1).Visible, 'on')
            set(h_text, 'Visible', 'off'); %Set all labels visibility to off
        else
            set(h_text, 'Visible', 'on');  %Set all labels visibility to on
        end
    end
    

    解释在 cmets 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      相关资源
      最近更新 更多