113

同じグラフにいくつかのカーネル密度推定をプロットしようとしていますが、それらをすべて異なる色にしたいと考えています。'rgbcmyk'文字列を使用して、個別のプロットごとにステップスルーする、まとまりのないソリューションがありますが、7回の反復後に重複が発生し始めます。これを行うためのより簡単で効率的な方法と、より多くの色のオプションはありますか?

for n=1:10
 source(n).data=normrnd(rand()*100,abs(rand()*50),100,1); %generate random data
end
cstring='rgbcmyk'; % color string
figure
hold on
for n=1:length(source)
 [f,x]=ksdensity(source(n).data); % calculate the distribution
 plot(x,f,cstring(mod(n,7)+1))  % plot with a different color each time
end
4

5 に答える 5

132

HSV などのカラーマップを使用して、一連の色を生成できます。例えば:

cc=hsv(12);
figure; 
hold on;
for i=1:12
    plot([0 1],[0 i],'color',cc(i,:));
end

MATLAB には 13 の異なる名前付きカラーマップがあります ( 'doc colormap'はそれらすべてを一覧表示します)。

線を異なる色でプロットするもう 1 つのオプションは、LineStyleOrderプロパティを使用することです。詳細については、MATLAB ドキュメンテーションの「プロット用の線の色の定義」を参照してください。

于 2010-01-08T16:13:03.183 に答える
107

実際、色を循環させる適切なショートカット方法はhold all;、代わりに を使用することですhold on;。連続plotするそれぞれは、MATLAB の既定のカラーマップを介して (自動的に) 回転します。

の MATLAB サイトからhold:

hold allプロットと現在の線の色と線のスタイルを保持し、後続のプロット コマンドが ColorOrder プロパティと LineStyleOrder プロパティの値をリストの先頭にリセットしないようにします。プロット コマンドは、リスト内の最後のプロットが停止した場所から、定義済みの色と線種を循環し続けます。

于 2010-01-09T01:50:32.347 に答える
37

遅い答えですが、追加する2つのこと:

  • プロパティを変更する'ColorOrder'方法と でグローバル デフォルトを設定する方法'DefaultAxesColorOrder'については、この投稿の下部にある「付録」を参照してください。
  • Image Processing Toolbox を使用する場合、MATLAB Central File Exchange には視覚的に異なる色をいくつでも生成できる優れたツールがあります。詳細については、以下をお読みください。

このColorOrder axesプロパティを使用すると、MATLAB は使用時に色のリストを自動的に循環できます(繰り返しますが、方法については、以下の付録hold on/allを参照してください)。ただし、既定では、MATLAB は循環する色の短いリスト ( R2013b の時点でわずか 7つ) のみを指定します。その一方で、より多くのデータ系列に対して適切な色のセットを見つけるのは問題になる可能性があります。10 個のプロットの場合、明らかに既定値に依存することはできません。setgetColorOrderDefaultAxesColorOrderColorOrder

N 個の視覚的に異なる色を定義する優れた方法は、MATLAB Central File File Exchangeの"Generate Maximally Perceptually-Distinct Colors" (GMPDC) サブミッションを使用することです。それは、著者自身の言葉で最もよく説明されています。

この関数は、「Lab」色空間を参照することで識別可能な一連の色を生成します。この色空間は、RGB よりも人間の色の知覚により近いものです。可能な色の最初の大きなリストが与えられると、以前に選択されたすべてのエントリから (Lab 空間で) 最も遠いリスト内のエントリが繰り返し選択されます。

たとえば、25 色が要求された場合:

25

GMPDC 提出物は、MathWorks の公式ブログで 2010 年の Pick of the Weekに選ばれました。その理由の 1 つは、任意の数の色を要求できることです (MATLAB に組み込まれている 7 つの既定の色とは対照的です)。ColorOrder彼らは、起動時にMATLAB を次のように設定するという優れた提案さえしました。

distinguishable_colors(20)

もちろん、ColorOrder単一の軸に を設定することも、好きなように使用する色のリストを生成することもできます。たとえば、10 個の「最大限に知覚的に異なる色」を生成し、それらを同じ軸上の 10 個のプロットに使用するには (ただし、 を使用しないColorOrderため、ループが必要です):

% Starting with X of size N-by-P-by-2, where P is number of plots
mpdc10 = distinguishable_colors(10) % 10x3 color list
hold on
for ii=1:size(X,2),
    plot(X(:,ii,1),X(:,ii,2),'.','Color',mpdc10(ii,:));
end

axis プロパティを使用すると、プロセスが単純化され、ループが不要forColorOrderになります。

サイズ N x P x 2 の % X
mpdc10 = 区別可能な_色 (10)
ha = 軸; ホールド(ハ、オン)
set(ha,'ColorOrder',mpdc10) % ---ここでColorOrder を設定---
plot(X(:,:,1),X(:,:,2),'-.') %ループは必要ありません。'Color' は必要ありません。わーい!

付録

ColorOrder現在の軸に使用される RGB 配列を取得するには、

get(gca,'ColorOrder')

ColorOrder新しい軸のデフォルトを取得するには、

get(0,'DefaultAxesColorOrder')

ColorOrderMATLAB の起動時に 10 色で新しいグローバルを設定する例startup.m:

set(0,'DefaultAxesColorOrder',distinguishable_colors(10))
于 2014-02-26T00:43:05.107 に答える
13

パーティーに遅刻。私はこれを自分で調べていて、ColorOrder と呼ばれるこの軸オプションについて見つけました。セッションまたは図だけの色の順序を指定し、配列をプロットして、指定された色を MATLAB に自動的に循環させることができます。

デフォルトの ColorOrder の変更を参照してください

set(0,'DefaultAxesColorOrder',jet(5))
A=rand(10,5);
plot(A);
于 2012-06-12T18:36:37.203 に答える
5

すべてのベクトルのサイズが等しい場合、行列を作成してプロットします。各列は自動的に異なる色でプロットされます。次に、legend列を示すために使用できます。

data = randn(100, 5);

figure;
plot(data);

legend(cellstr(num2str((1:size(data,2))')))

または、カーネル名を持つセルがある場合は、次を使用します

legend(names)
于 2010-01-11T19:36:13.403 に答える