2

私はMatlabに次のプロットを持っています:

上部と左側にテキスト ラベルを付けてプロットする

画像のサイズは異なる場合があり、上部と左側のテキスト ボックスの長さも異なります。これらのテキスト ボックスに入力する文字列を動的に決定し、次のように作成します。

[M,N] = size(img);
imagesc((1:N)-0.5,(1:M)-0.5, img > 0.5); axis image; grid on;
colormap([1 1 1; 0.5 0.5 0.5]);
set(gca,'XColor','k','YColor','k','TickDir','out')
set(gca,'XTick',1:N,'XTickLabel',cell(1,N))
set(gca,'YTick',1:N,'YTickLabel',cell(1,N))

for iter = 1:M
    text(-0.5, iter-0.5, sprintf(strL, br{iter,:}), ...
         'FontSize',16, ...
         'HorizontalAlignment','right', ...
         'VerticalAlignment','middle', ...
         'Interpreter','latex' );
end

for iter = 1:N
    text(iter-0.5, -0.5, {bc{:,iter}}, ...
         'FontSize',16, ...
         'HorizontalAlignment','center', ...
         'VerticalAlignment','bottom', ...
         'Interpreter','latex' );
end

ここでbr、 およびbcは、ラベルの適切な数値を含む cell 配列です。問題は、ほとんどの場合、テキストが図の端で切り取られることです。私はこれを回避策として使用しています:

set(gca,'Position',[0.25 0.25 0.5 0.5]);

ご覧のとおり、プロットの周囲に大きな境界線を追加して、テキスト用のスペースを増やしているだけです。このスケーリングは 1 つのズーム レベルで機能しますが、プロット ウィンドウを最大化すると空きスペースが多くなり、プロット ウィンドウを縮小すると再びクリッピングが発生します。これらのラベルを追加して、テキストが切り取られないようにしながら、最小限のスペースを使用するよりインテリジェントな方法はありますか?

編集:

Bas Swinckels が推奨するTextZoomableパッケージを試してみたところ、ズームの問題が大幅に改善されましたが、ズーム可能なset(gca,'Position',[0.25 0.25 0.5 0.5])テキストに合わせるには回避策を使用する必要があります。文字列が長すぎるとクリッピングが発生するため、これは理想的とは言えません。テキストがクリップされないことを保証できる解決策を見つけることにまだ興味があります。そこから、図がスケーリングされるときにクリッピングを防ぎたい場合は、TextZoomable を使用できます。

4

1 に答える 1

1

画像を移動/ズーム/ストレッチするときにテキストをスケーリングする必要があります。ファイル交換でこのソリューションを見たことがあるかもしれません。私自身は使っていないので、このまま使えるかどうかはわかりません。しかし、ソース コードから解決策のヒントが得られるかもしれません。

于 2013-11-04T21:50:32.263 に答える