Dor*_*oom 5 matlab latex symbols datatipfunction string-formatting
我试图用一个标有'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
Run Code Online (Sandbox Code Playgroud)
其中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)]};
Run Code Online (Sandbox Code Playgroud)
更新:此解决方案主要适用于R2014a及更早版本,因为它似乎因较新版本而失败,特别是R2014b及更新版本使用新的手柄图形系统.对于使用新手柄图形系统的较新版本,可在此处找到解决方案.
由于一些奇怪的原因,MATLAB中的数据光标工具强制设置数字提示文本,而不是使用TeX/LaTeX解释(即使默认的MATLAB设置说这样做).似乎也无法通过数据光标模式对象属性直接设置文本属性.
但是,我找到了一个解决方法.如果将以下内容添加到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
Run Code Online (Sandbox Code Playgroud)
图中创建的每个图形对象都必须有一个句柄.对象有时会将其'HandleVisibility'
属性设置为'off'
,因此它们的句柄不会显示在父对象的子对象列表中,从而使它们更难找到.解决此问题的一种方法是将根对象的'ShowHiddenHandles'
属性设置为.然后,这将允许您使用查找具有某些属性的图形对象的句柄.(注意:你也可以使用而不用担心设置)'on'
findobj
findall
'ShowHiddenHandles'
打开数据光标模式并单击绘图会创建一个hggroup对象,其中一个子对象是显示文本的文本对象.上面的代码找到此文本对象并将'Interpreter'
属性更改为'tex'
以便正确显示theta符号.
从技术上讲,上述代码只需调用一次,而不是每次polarlabel
调用.但是,文本对象在第一次单击绘图以显示数据提示(即第一次polarlabel
被调用)之前不存在,因此代码必须进入UpdateFcn
数据光标模式对象,以便显示的第一个数据提示具有正确的文本格式.