典型的なMATLAB散布図形式でデータをプロットしています。通常、複数のデータセットをプロットするときは、コマンド「hold on;」を使用してから、各データをプロットし、続いてこれを使用して凡例を取得します。
legend('DataSet1', 'DataSet2') % etcetera
ただし、同じ軸にプロットしている(複数の)データセットは、必ずしも毎回同じデータセットであるとは限りません。同じ軸上に最大6つの異なるデータセットをプロットしていますが、これらの任意の組み合わせを表示できます(ユーザーが何を表示するかによって異なります)。伝説を伝統的な方法で設定したいのであれば、明らかにそれは他の多くのことになるでしょう。
私が本当にやりたいのは、各DataSetに名前を割り当てることですプロットされているとおり後で、表示されているすべてのデータの凡例を呼び出すことができます。
...または、誰もが考えることができるこの問題に対する他の解決策..?
1つのオプションは、次のように'UserData'
プロパティを利用することです。
figure;
hold on
plot([0 1], [1 0], '-b', 'userdata', 'blue line')
plot([1 0], [1 0], '--r', 'userdata', 'red dashes')
% legend(get(get(gca, 'children'), 'userdata')) % wrong
legend(get(gca, 'children'), get(get(gca, 'children'), 'userdata')) % correct
編集:質問者が指摘したように、元のバージョンは故障する可能性があります。これを修正するには、どのハンドルがどのラベルに対応するかを指定します(修正バージョンでは、正しい順序になっています)。
各プロットにDisplayNameプロパティを設定できるはずです。
figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')
http://www.mathworks.com/help/matlab/ref/line_props.html
補足:図を希望どおりに表示し、図の[ファイル]メニューオプション[Mファイルを生成...]を選択して、生成された出力コードを調べることで、このような小さなトリックをたくさん見つけました。
_'DisplayName'
_をplot()
プロパティとして使用し、凡例を次のように呼び出します。
_legend('-DynamicLegend');
_
私のコードは次のようになります:
_x = 0:h:xmax; %// get an array of x-values
y = someFunction; %// function
plot(x, y, 'DisplayName', 'Function plot 1'); %// plot with 'DisplayName' property
legend('-DynamicLegend',2); %// '-DynamicLegend' legend
_
出典: http://undocumentedmatlab.com/blog/legend-semi-documented-feature/
次のようなことを試すことができます
for k = 1:10
h(k) = plot(...);
name{k} = ['condition ' num2str(k)];
end
legend(h, name);
Forループを作成します。ただし、forループの前に、配列を作成します。
%for example
legendset = {}
for i = 1:10
%blabla
%Then in the fore loop say:
legendset = [legendset;namedata(i)]
%It puts all names in a column of legendset.
%Make sure namedata are characters.
%foreloop ends
end
%Then after the foreloop say:
legend(legendset).