5

「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)]};
4

1 に答える 1

8

更新:このソリューションは、新しいバージョン、特に新しいハンドルグラフィックシステムを使用するR2014b以降では失敗するように見えるため、主にバージョンR2014a以前に適用できます。新しいハンドルグラフィックシステムを使用する新しいバージョンの場合、解決策はここにあります。


奇妙な理由で、MATLABのデータカーソルツールは、TeX / LaTeXの解釈ではなく、文字通りに表示されるようにデータチップテキストを強制的に設定します(デフォルトのMATLAB設定でそうするように指示されている場合でも)。また、データカーソルモードのオブジェクトプロパティを介してテキストプロパティを直接設定する方法はないようです。

ただし、1つの回避策を見つけました。関数の最後に以下を追加する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'ため、オブジェクトのハンドルは親オブジェクトの子オブジェクトのリストに表示されないため、オブジェクトを見つけるのが難しくなります。これを回避する1つの方法は、ルートオブジェクトの'ShowHiddenHandles'プロパティをに設定することです。これにより、特定のプロパティを持つグラフィックスオブジェクトのハンドルを検索するために使用できるようになります。(注:設定を気にせずに使用することもできます)'on'findobjfindall'ShowHiddenHandles'

データカーソルモードをオンにしてプロットをクリックすると、hggroupオブジェクトが作成され、その1つの子が表示されるテキストのテキストオブジェクトになります。上記のコードは、このテキストオブジェクトを検索し、シータシンボルが正しく表示されるように'Interpreter'プロパティをに変更します。'tex'

技術的には、上記のコードは1回だけ呼び出す必要があり、毎回呼び出されるわけではありませんpolarlabel。ただし、テキストオブジェクトは、プロットを最初にクリックしてデータチップを表示するまで(つまり、最初に呼び出されるまで)存在しないため、データカーソルモードオブジェクトpolarlabelのコードを入力して、UpdateFcn表示される最初のデータヒントは、正しいテキスト形式になっています。

于 2009-11-03T16:42:25.320 に答える