label2rgb
を使用して、ラベルイメージとカスタムカラーマップから作成されたカラーマップイメージの凡例を作成しようとしています。基本的には、カラーマップの小さな長方形のサンプルとカスタムラベルを示す伝説が必要です。Matlab image legend with color blocks
ラベルと背景の色を設定したいと考えています。画像はimshowを使用して表示され、明らかにlegend
はそのような図形には影響しません。
colorbar
を使用してこれを少しハックしましたが、プロットウィンドウのサイズを変更するとすべてがスローされるため、私はそれにはあまり満足していません。
このタイプの凡例は、Figureウィンドウのサイズが変更されたときに必要に応じて浮動して移動するように、どのようにして行うのが望ましいか教えてください。これが不可能な場合は、カラーバーのラベルテキストをカラーリングするか、カラーバーの境界ボックス(ラベルを含む)にバックグラウンドカラーを与える方法を教えてください。ご覧のように、私が手動で背景の白いボックスを追加していないと、ラベルは見えなくなります。
ありがとうございました。
label_image = zeros(768, 1024);
label_image(100:400, 500:600)=1;
label_image(500:600, 100:600)=2;
label_image(25:300, 100:400)=3;
custom_colormap = [ 0 1 0; 1 0 0; 0 0 1;];
label_image = label2rgb(label_image, custom_colormap, [0 0 0]);
% Make a white backround for the colorbar.
% Don't want to have to do this line.
label_image(25:140, 775:1010,:)=255;
% Show the image
imshow(label_image, 'InitialMagnification', 50);
% Here, I would like to be able to set colorbar label text color and/ or
% colorbar bounding box background color, or better yet, use some variant
% on the legend function to do this automatically
colormap(custom_colormap);
labels={'Both', 'Always Moving', 'Moved'};
hcb=colorbar('peer',gca,...
[0.7 0.8 0.03 0.1],...
'YTickLabel',labels,...
'XAxisLocation','bottom',...
'TickLength',[0 0],...
'Color',[1 0 1]);
ありがとうございました。迅速なフォローアップの質問:「凡例」のように、カラーバーをイメージ内のおおよその位置に自動的にドッキングする方法があります。たとえば、 'legend'では' NorthEast'と言うことができ、Figureウィンドウのサイズを変更すると凡例は右上隅にとどまります。上記のコードでは、デフォルトのウィンドウサイズでうまくいくように見えますが、サイズを変更するとカラーバーが動き、特定のウィンドウサイズで画像の外に出ることがあります。ありがとう。 – SSilk
さらに重要なフォローアップの質問: 'print(gcf、 'result.png')、 '-dpng');'コマンドを使ってFigureを印刷すると、カラーバーのテキストが黒に戻ります。この数字を印刷するときにテキストを白くしておく方法を教えてください。ありがとう。 – SSilk
カラーバーには、['eastoutside'](http://www.mathworks.com/help/techdoc/ref/colorbar.html)などの自動プレースメントもあります。印刷に関しては、 '-depsc'のような別のフォーマットで保存できるかどうかを確認することができます。 – Jonas