pgfplot 軸の範囲外のノードテキストを表示する

pgfplot 軸の範囲外のノードテキストを表示する

私は matlab2tikz を使用して pgfplots .tex コードを生成し、pdflatex で図を作成しています。図を作成するために使用している matlab 関数は、各目盛りラベルを明示的に作成するため、次の matlab コードを使用して目盛りラベルを拡大縮小したり回転したりできます。

text(x(k),y(k),labs{k},'horizontalalignment',horizk,...
'verticalalignment',vertk, ...
'rotation',rotang(k), ...
'fontsize',gfontsize*scl(k), ...
'color',gcolor, ...
'tag','m_grid_xticklabel', ...
'fontname',gfontname);

変換された.texコードを調べると、次のことがわかります。

\node[below, inner sep=0mm, rotate=359.994889043193, text=black]
at (axis cs:-8.79858922562881e-07,  -4.84813663392814e-06,0) {$\text{  81}^\text{o}\text{W }$};

は、1 つの目盛りラベルを表します。ただし、この行でコード化されているテキスト文字列は、結果の .pdf には表示されません。これは、特定の座標が軸の範囲外にあるためと考えられます。これをテストするために、範囲内の座標を代入してコンパイルしたところ、ラベルまたはテキストが表示されることを確認しました。

興味深いことに、例えばviewコマンドを使ってmatlabで図を作成すると、

view(45,45)

軸ラベルを表すテキスト文字列は表示されますが、配置がずれています。特に、文字列には y 値があり、予想よりもはるかに高い位置に配置されているように見えます。x 配置は問題ないと思います。

私が考える解決策は、matlab 側または pgfplots/tikz 側のいずれかに存在する可能性があります。理想的には、解決策は、プリアンブルまたは軸ラベルの設定時に含まれる短いコードで構成されます。このコードにより、次の構文で作成されたテキストが可能になります。

\node[<options>] at (axis cs:x,y,z) {<text>};

座標 x、y、z が範囲内にあるかどうかに関係なく表示されます。提案が必ずしも簡単に出てこない場合は、mwe を作成できます。

答え1

clip=false環境オプションを追加すると、軸の境界ボックスの外側に表示されるものをすべてクリッピングするaxisデフォルトの動作が上書きされます。pgfplots

生成された他のコードによっては、他の副作用が発生する可能性がありますが、ほとんどの場合は問題ありません。

matlab2tikzこのキー設定は、の機能を使用して生成されたコードに追加できますEXTRAAXISOPTIONS。を呼び出す前にmatlab2tex

EXTRAAXISOPTIONS = {'clip=false'};

生成されたコードにこのオプションを追加します。

関連情報