10

典型的なMATLAB散布図形式でデータをプロットしています。通常、複数のデータセットをプロットする場合は、コマンド「hold on;」を使用してから、各データをプロットし、続いてこれを使用して凡例を取得します。

legend('DataSet1', 'DataSet2') % etcetera

ただし、同じ軸にプロットしている(複数の)データセットは、必ずしも毎回同じデータセットであるとは限りません。同じ軸上に最大6つの異なるデータセットをプロットしていますが、これらの任意の組み合わせを表示できます(ユーザーが何を表示するかによって異なります)。明らかに、私が伝説を伝統的な方法で設定したいのであれば、それは他の多くのことになるでしょう。

私が本当にやりたいのは、各DataSetにプロット時に名前を付けて、後で表示されているすべてのデータの凡例を呼び出すことができるようにすることです。

...または、誰もが考えることができるこの問題に対する他の解決策..?

4

5 に答える 5

20

プロットごとにDisplayNameプロパティを設定できるはずです。

figure
hold on
plot(...,'DisplayName','DataSet1')
plot(...,'DisplayName','DataSet2')
legend(gca,'show')

http://www.mathworks.com/help/matlab/ref/line_props.html

補足:図を希望どおりに表示し、図の[ファイル]メニューオプション[Mファイルを生成...]を選択して、生成された出力コードを調べることで、このような小さなトリックをたくさん見つけました。

于 2013-05-24T20:14:04.277 に答える
11

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

編集:質問者が指摘したように、元のバージョンは故障する可能性があります。これを修正するには、どのハンドルがどのラベルに対応するかを指定します(修正バージョンでは、正しい順序になっています)。

于 2012-05-24T16:31:59.320 に答える
10

プロパティとして使用'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/

于 2013-05-27T01:15:04.037 に答える
3

次のようなことを試すことができます

for k = 1:10

   h(k) = plot(...);
   name{k} = ['condition ' num2str(k)];

end

legend(h, name);
于 2012-05-24T16:18:18.960 に答える
0

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). 
于 2014-01-24T10:31:35.673 に答える