【问题标题】:How do I use TeX/LaTeX formatting for custom data tips in MATLAB?如何在 MATLAB 中为自定义数据提示使用 TeX/LaTeX 格式?
【发布时间】:2023-04-05 09:34:01
【问题描述】:

我正在尝试使用标有“R:...,Theta:...”的数据提示来注释极坐标图,其中 theta 实际上是希腊符号,而不是拼写出来的单词。我熟悉使用 '\theta' 生成符号的字符串格式,但在这种情况下它不起作用。有没有办法将 LaTeX 解释器应用于数据提示?到目前为止,这是我所拥有的:

f1=figure;
t=pi/4;
r=1;
polar(t,r,'.');
dcm_obj = datacursormode(f1);
set(dcm_obj,'UpdateFcn',@polarlabel)
info_struct = getCursorInfo(dcm_obj);
datacursormode on

其中polarlabel定义如下:

function txt = polarlabel(empt,event_obj)
pos = get(event_obj,'Position');
x=pos(1);
y=pos(2);
[th,r]=cart2pol(x,y);
txt = {['R: ',num2str(r)],...
    ['\Theta: ',num2str(th*180/pi)]};

【问题讨论】:

    标签: matlab latex symbols string-formatting datatipfunction


    【解决方案1】:

    更新:此解决方案主要适用于 R2014a 及更早的版本,因为它似乎不适用于新版本,特别是使用 new handle graphics system 的 R2014b 及更新版本。对于使用新手柄图形系统的较新版本,可以找到解决方案here


    出于某种奇怪的原因,MATLAB 中的 data cursor tool 强制将数据提示文本设置为按字面显示而不是使用 TeX/LaTeX 解释(即使 default MATLAB settings 说要这样做)。似乎也无法通过数据游标模式对象属性直接设置文本属性。

    但是,我想出了一种解决方法。如果将以下内容添加到 polarlabel 函数的末尾,则文本应正确显示:

    set(0,'ShowHiddenHandles','on');                       % Show hidden handles
    hText = findobj('Type','text','Tag','DataTipMarker');  % Find the data tip text
    set(0,'ShowHiddenHandles','off');                      % Hide handles again
    set(hText,'Interpreter','tex');                        % Change the interpreter
    

    说明

    图中创建的每个图形对象都必须有一个handle。对象有时会将其'HandleVisibility' property 设置为'off',因此它们的句柄不会出现在其父对象的子对象列表中,从而使它们更难找到。解决此问题的一种方法是将root object'ShowHiddenHandles' property 设置为'on'。这将允许您使用findobj 查找具有某些属性的图形对象的句柄。 (注意:您也可以使用findall 而不必担心'ShowHiddenHandles' 设置)

    打开data cursor mode 并单击绘图会创建一个hggroup object,其中一个子元素是显示文本的text object。上面的代码找到这个文本对象并将'Interpreter' property 更改为'tex' 以便正确显示theta 符号。

    从技术上讲,上述代码只需调用一次,而不是每次调用polarlabel。但是,直到您第一次单击绘图以显示数据提示时(即第一次调用 polarlabel),文本对象才存在,因此代码必须进入 UpdateFcn 以获取数据光标模式对象,以便显示的第一个数据提示具有正确的文本格式。

    【讨论】:

    • 感谢 gnovice,此解决方案完美运行!解释也很好。
    • 您可以将findobj 替换为findall,这与ShowHiddenHandles 属性无关
    • 为了记录,这似乎在 R2015a 中被打破了。现在调查一下。
    • 使用 hg2 stackoverflow.com/questions/30011448/…的较新版本的答案在这里
    猜你喜欢
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2014-03-12
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多