MATLAB:在图中为数据光标永久设置“文本更新功能”

问题描述 投票:2回答:3

问题:我使用MATLAB进行科学研究,而且我经常需要超过4位有效数字。每次我在图形的GUI中使用Data Cursor时,我需要手动右键单击点Select Text Update Function...Edit Text Update Function...,然后导航到我保存函数的文件夹,其回调打印超过4(例如8)个有效数字。这很烦人,应该有办法自动更改它。

理想的答案:我希望永久完成所有数字,例如:在一个更改我的startup.m文件中的默认设置的函数中。

足够好的答案:我想要一个包装的函数,我给出了图形处理,它为我修复了这个问题。

我谦卑地等待着无限的智慧。

matlab user-interface customization figure
3个回答
2
投票

永久解决方案

将编辑default_getDatatipText.m函数。您可以在以下位置找到它:

C:\...\MATLAB\R20xxx\toolbox\matlab\graphics\@graphics\@datacursor

在那里你会找到这条线:

DEFAULT_DIGITS = 4;  % Display 4 digits of x,y position

根据需要进行编辑,不会造成太大的伤害,但如果需要,可以进行备份。

替代方案:

还有可能提供自定义数据提示:Tutorial at Matlab Central

它最终可能看起来像这样:

(数据提示之外的其他文本已经过后处理)


当你谈论精确度时。数据提示始终捕捉到最接近的数据点。它没有显示点击位置的插值数据。


1
投票

由thewaywewalk给出的永久性答案在R2015a中不再有效,可能在以后的时间里也不再有效。所以我在这里分享我的临时和永久解决方案的解决方案

临时解决方案(单个数字):

以下函数包含作为嵌套函数的更新函数。调用datacursorextra将其应用于当前数字,或datacursorextra(fig)将其应用于某些数字fig

function datacursorextra(fig)
    % Use current figure as default
    if nargin<1
        fig = gcf;
    end

    % Get the figure's datacursormode, and set the update function
    h = datacursormode(fig);
    set(h,'UpdateFcn',@myupdatefcn)

    % The actual update function
    function txt = myupdatefcn(~,event)
        % Short-hand to write X, Y and if available Z, with 10 digit precision:
        lbl = 'XYZ';
        txt = arrayfun(@(s,g)sprintf('%s: %.10g',s,g), lbl(1:length(event.Position)), event.Position,'uniformoutput',false);

        % If a DataIndex is available, show that also:
        info = getCursorInfo(h);
        if isfield(info,'DataIndex')
            txt{end+1} = sprintf('Index: %d', info.DataIndex);
        end
    end
end

永久解决方案(默认适用于所有数字):

我还没有找到为数据光标设置默认UpdateFcn的方法,但是可以添加一些代码,每次创建新图形时都会调用这些代码。将以下行添加到startup.m

set(0,'defaultFigureCreateFcn',@(s,e)datacursorextra(s))

并确保您的Matlab路径中提供了上面给出的datacursorextra函数。


0
投票

@ caspar的解决方案非常有效。您还可以使用更新解决方案的txt {}部分

    if isfield(info,'DataIndex')
       DataIndex = [info.DataIndex];
       txt{end+1} = sprintf('Index: %d\n', DataIndex(1));
    end

这将使您在同一图中有多个指针时更新索引字段。

© www.soinside.com 2019 - 2024. All rights reserved.