注意!この回答はの文書化されていない機能を使用しています。その結果は、バージョン2016aおよび2017aでテストされ、他のバージョンでは異なる場合があります。
Matlabの他のバージョンでも動作するかどうかをコメントで教えてください。
凡例のundocumented propertiesを調査したところ、その回答が見つかりました。問題の最も直接的な答えは、凡例のタイトルの位置をその場所に戻すことです。これは、Position
という属性(の一部)であるのプロパティNodeChildren
の凡例タイトルで実行できます。
凡例ボックスは実質的に小さな軸オブジェクトであるため、位置単位は軸ボックスに対して正規化されます。私たちは伝説の作成後、それを見れば、我々が得る:我々は問題の伝説を参照してくださいどこ
[hleg,att] = legend('show');
title(hleg,'my title')
hleg.Title.NodeChildren.Position
ans =
0 0 0
です。私は、縦軸(Y = 1.5)、及び奥行き軸上に、横軸(X = 0.5)の中心でそれを配置ここ
hleg.Title.NodeChildren.Position = [0.5 1.5 0];
:今はバックその正しい場所に移動することができそれがゼロ(Z = 0)ですので無関係です:あなたは伝説がデータを妨害することを選択肢に悩まされていない場合は
、(例えば、あなたの凡例は、データ軸の外側にある)、その後のことができます。ここで止まって。そうでない場合は、読み続ける...
hleg.Title.NodeChildren.BackgroundColor = 'w';
をしかし、背景が唯一のテキストボックスのためのものであり、凡例ボックスに整列されていないので、それが良い見ていない:
我々は白に背景色を設定することができます。だから私はタイトルを含むように凡例のボックスを拡大し、いくつかのスペースを作るために凡例の属性を下に移動することを好む。 (私たちはすべての要素の右の位置を計算する必要があるため)それはより多くの手間がかかるが、それは次の方法で行うことができます。
x = 1:0.1:10;
plot(x,sin(x),x,cos(x))
[hleg,icons,plots] = legend('show');
title(hleg,'my title')
hleg.Title.Visible = 'on';
% the addition in height needed for the title:
title_hight = hleg.Position(4)/numel(plots);
hleg.Position([2 4]) = [hleg.Position(2)-title_hight hleg.Position(4)+title_hight];
% calculate new position for the elements in the legeng:
new_pos = fliplr(0.5/(numel(plots)+1):1/(numel(plots)+1):1);
hleg.Title.NodeChildren.Position = [0.5 new_pos(1) 0];
% set the text to the right position:
leg_txt = findobj(icons,'Type','Text');
txt_pos = cell2mat({leg_txt.Position}.');
txt_pos(:,2) = new_pos(2:end);
set(leg_txt,{'Position'},mat2cell(txt_pos,[1 1],3));
% set the icons to the right position:
leg_att = findobj(icons,'Type','Line');
set(leg_att,{'YData'},mat2cell(repmat(repelem(new_pos(2:end).',...
numel(plots)),1,2),ones(numel(plots)*2,1),2))
Iが、上記のコードは、より多くのデータ系列のためにも一般化されましたこれが正しい解決策を提供できず、いくつかの微調整が必要な場合があると推測します。
あなたは= '[LGD、アイコン、プロット、TXT]のための[ドキュメント](https://mathworks.com/help/matlab/ref/legend.html)にこのノートを読みました伝説(___) 'オーバーロード? *注:この構文はお勧めしません。すべてのグラフィック機能をサポートしていない凡例が作成されます。代わりに* lgd = legend(__) '*構文を使用して凡例オブジェクトを返し、凡例のプロパティを設定します* – codeaviator
@Cebriしかし、私の必要に応じて凡例を操作するために、アイコンへのアクセスが必要です。そうでなければ、私はどのようにプロパティを変更できますか? – EBH
あなたが書いたように、あなたの最善の策は凡例の位置にテキストを使用することです。複数回実行する必要がある場合は、関数を作成することができます。 – oro777