![]() |
如何在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)]}; 回答: [B]更新:[/B]此解决方案主要适用于R2014a和更早的版本,因为它对于新版本(尤其是使用[URL="https://www.mathworks.com/products/matlab/matlab-graphics.html"]新的手柄图形系统的[/URL] R2014b和较新版本)似乎失败。对于使用新手柄图形系统的新版本,可以在[URL="https://stackoverflow.com/q/30011448/52738"]此处[/URL]找到解决方案。 出于某种奇怪的原因,MATLAB中的[URL="https://www.mathworks.com/help/matlab/ref/datacursormode.html"]数据光标工具会[/URL]强制设置数据提示文本以文字形式显示,而不是使用TeX / LaTeX解释(即使[URL="https://www.mathworks.com/help/matlab/ref/text-properties.html#property_d0e1002285"]默认的MATLAB设置[/URL]是这样做的)。似乎也没有办法通过数据光标模式对象属性直接设置文本属性。 但是,我已经找到一种解决方法。如果将以下内容添加到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 [B]说明[/B] 图中创建的每个图形对象都必须具有一个[URL="https://www.mathworks.com/help/matlab/learn_matlab/understanding-handle-graphics-objects.html"]句柄[/URL] 。对象有时会将其[URL="https://www.mathworks.com/help/matlab/ref/text-properties.html#property_d0e1005510"]'HandleVisibility'属性[/URL]设置为'off' ,因此它们的句柄将不会显示在其父对象的子对象列表中,因此很难找到它们。解决此问题的一种方法是将[URL="https://www.mathworks.com/help/matlab/ref/groot.html"]根对象[/URL]的[URL="https://www.mathworks.com/help/matlab/ref/root-properties.html#property_d0e877586"]'ShowHiddenHandles'属性[/URL]设置为'on' 。然后,这将允许您使用[URL="https://www.mathworks.com/help/matlab/ref/findobj.html"]findobj[/URL]查找具有某些属性的图形对象的句柄。 ( [B]注意:[/B]您也可以使用[URL="https://www.mathworks.com/help/matlab/ref/findall.html"]findall[/URL]而不用担心'ShowHiddenHandles'设置) 打开[URL="https://www.mathworks.com/help/matlab/ref/datacursormode.html"]数据光标模式[/URL]并单击图将创建一个[URL="https://www.mathworks.com/help/matlab/ref/hggroup.html"]hggroup对象[/URL] ,其中一个子[URL="https://www.mathworks.com/help/matlab/ref/text.html"]对象[/URL]是所显示文本的[URL="https://www.mathworks.com/help/matlab/ref/text.html"]文本对象[/URL] 。上面的代码找到此文本对象,并将[URL="https://www.mathworks.com/help/matlab/ref/text-properties.html#property_d0e1002285"]'Interpreter'属性[/URL]更改为'tex'以便正确显示theta符号。 从技术上讲,上面的代码只需调用一次,而不是每次调用polarlabel 。但是,直到您第一次单击绘图以显示数据提示时(即第一次polarlabel ),文本对象才存在,因此代码必须在UpdateFcn中输入数据光标模式对象,因此所显示的第一个数据提示具有正确的文本格式。 [url=https://stackoverflow.com/questions/1668071]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:28。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.