matlab - 如何在 MATLAB 中使用 TeX/LaTeX 格式设置自定义数据提示?

标签 matlab latex symbols string-formatting datatipfunction

我正在尝试使用标有“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)]};

最佳答案

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


出于某种奇怪的原因,data cursor tool在 MATLAB 中强制将数据提示文本设置为按字面显示,而不是使用 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',因此它们的句柄不会出现在其父对象的子对象列表中,从而使它们更难找到。解决此问题的一种方法是设置 'ShowHiddenHandles' propertyroot object'on'。这将允许您使用 findobj查找具有特定属性的图形对象的句柄。 (注意:您也可以使用 findall 而不必担心 'ShowHiddenHandles' 设置)

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

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

关于matlab - 如何在 MATLAB 中使用 TeX/LaTeX 格式设置自定义数据提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1668071/

相关文章:

Vim latex 套件 : Display inline-math delimiters ($$)

java - 可以使用 Java 库转换为 HTML 和 LaTeX 的轻量级文本标记语言?

python - 在Python中声明多个符号变量

c - 如何将unicode转换为符号C

python - 相当于 MATLAB 稀疏函数的 numpy/scipy

matlab - 从矩阵的每一行中提取唯一元素 (Matlab)

pdf - pdfLaTeX 中的首字下沉

.net - pdb 文件包含多少信息? (C#/.NET)

matlab - 在 MATLAB 中使用 unique() 重构向量

matlab - 如何在灰度图像的每一行之间添加细水平线?