如何在MATLAB中使用TeX / LaTeX格式化自定义数据提示?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MATLAB中使用TeX / LaTeX格式化自定义数据提示?相关的知识,希望对你有一定的参考价值。
我试图用一个标有“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和更新版本。对于使用新手柄图形系统的新版本,可以找到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'
,因此它们的句柄不会显示在其父对象的子对象列表中,从而使它们更难找到。解决这个问题的一种方法是将'ShowHiddenHandles'
property的root object设置为'on'
。这将允许您使用findobj
查找具有某些属性的图形对象的句柄。 (注意:您也可以使用findall
而不用担心'ShowHiddenHandles'
设置)
打开data cursor mode并单击该图创建一个hggroup object,其中一个孩子是显示文本的text object。上面的代码找到了这个文本对象,并将'Interpreter'
property更改为'tex'
,以便正确显示theta符号。
从技术上讲,上述代码只需调用一次,而不是每次调用polarlabel
。但是,文本对象直到第一次单击绘图以显示数据提示时才会存在(即第一次调用polarlabel
),因此代码必须在UpdateFcn
中进入数据光标模式对象,显示的第一个数据提示具有正确的文本格式。
以上是关于如何在MATLAB中使用TeX / LaTeX格式化自定义数据提示?的主要内容,如果未能解决你的问题,请参考以下文章