Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在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和更早的版本,因为它对于新版本(尤其是使用新的手柄图形系统的 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 说明

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

打开数据光标模式并单击图将创建一个hggroup对象 ,其中一个子对象是所显示文本的文本对象 。上面的代码找到此文本对象,并将'Interpreter'属性更改为'tex'以便正确显示theta符号。

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



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:51


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.