Main Content

プロット関数による色とライン スタイルの選択の制御

同じ座標軸に複数のデータセットを共にプロットすると、MATLAB® は自動的に異なる色 (場合によってはライン スタイルとマーカーも) をプロット オブジェクトに割り当てます。プロット関数を呼び出すときに色、ライン スタイル、およびマーカーをカスタマイズできるほか、関数を呼び出した後にプロパティを設定することもできます。

たとえば、赤の実線と緑の破線をプロットします。その後、赤の線に四角形のマーカー、緑の線に円形のマーカーを追加します。

p1 = plot([0 1 2 3],'-r');
hold on
p2 = plot([1 2 3 4],'--g');
hold off

% Add markers
p1.Marker = 'sq';
p2.Marker = 'o';

このアプローチについては、プロットの色の指定で説明しています。これは、いくつかのプロットの側面をカスタマイズする場合に便利です。一方、それ以外の場合には柔軟性が低くなります。たとえば、ループでデータをプロットしたり、行列データをプロット関数に渡したりする場合です。このような場合、MATLAB による色、ライン スタイル、マーカーの自動割り当てを制御するプロパティを変更できます。

メモ

以下の例で使用されている機能には、R2019b 以降で使用できるものと、R2020a 以降で使用できるものが含まれています。それより前のリリースでプロットの色とライン スタイルを変更するには、プロットの各ラインの色が異なる理由プロットに使用するライン スタイル - LineStyleOrder を参照してください。

自動割り当ての仕組み

MATLAB は、座標軸の ColorOrder プロパティにリストされている色を繰り返し表示して、プロット オブジェクト (LineScatterBar オブジェクトなど) に色を割り当てます。ColorOrder プロパティには RGB 3 成分の配列が格納されおり、それぞれの RGB 3 成分は 1 色を定義します。既定の ColorOrder 配列には 7 色が格納されています。色の数より多くのオブジェクトを作成すると、色が繰り返されます。

プロット オブジェクトがライン スタイルとマーカーをサポートしている場合、MATLAB は座標軸の LineStyleOrder プロパティのリストも繰り返し表示します。LineStyleOrder プロパティには文字列の cell 配列が格納されます。各文字列はライン スタイル (またはライン スタイルとマーカーの組み合わせ) に対応します。既定の配列 LineStyleOrder には実線スタイル ('-') のみが格納されています。配列 LineStyleOrder のある文字列と共に配列 ColorOrder のすべての色が使用されてから、次の文字列が使用されます。このサイクルは、プロット オブジェクトが新しく追加されるたびに継続されます。色と文字列の組み合わせの数より多くのオブジェクトが存在する場合、サイクルが繰り返されます。

指定された配列 ColorOrder と配列 LineStyleOrder のペアについて、特定のプロット オブジェクトの色、ライン スタイルおよびマーカーは、そのオブジェクトの SeriesIndex の値により決定されます。これは R2020a 以降の新しいプロパティです。既定で、SeriesIndex プロパティはオブジェクトの作成順序に対応する数値で、1 から始まります。MATLAB はこの数値を使用して配列 ColorOrder および配列 LineStyleOrder のインデックスを計算します。

たとえば、axes オブジェクトを作成し、配列 ColorOrder で 2 色 (赤と青)、配列 LineStyleOrder で 2 種類のライン スタイル (実線と破線) を設定します。次に 5 本のラインをプロットします。

ax = axes;
ax.ColorOrder = [1 0 0; 0 0 1];
ax.LineStyleOrder = {'-','--'};

hold on
for i = 1:5
   plot([i i+2])
end
hold off

Plot containing five lines with two colors and two line styles.

次の表に、前のプロットにおける各ラインの SeriesIndex、配列 ColorOrder のインデックス、および配列 LineStyleOrder のインデックスを示します。

 SeriesIndex配列 ColorOrder のインデックス配列 LineStyleOrder のインデックスラインの外観
1 番目のライン111赤の実線
2 番目のライン221青の実線
3 番目のライン312赤の破線
4 番目のライン422青の破線
5 番目のライン511赤の実線

プロット オブジェクトの色、ライン スタイルおよびマーカーを変更するには、座標軸の ColorOrder プロパティまたは LineStyleOrder プロパティを変更するか、プロット オブジェクトの SeriesIndex プロパティを変更します。

カラー スキームとライン スタイルの変更

座標軸の ColorOrder プロパティを変更すると、プロットのカラー スキームが変更されます。座標軸の LineStyleOrder プロパティを変更すると、プロットで使用されるライン スタイル (場合によってはマーカーも) が変更されます。たとえば、既定の色とライン スタイルを使用して、8 本のラインをループでプロットします。

ax = axes;
hold on
for i = 0:7
    plot([i i+2])
end
hold off

Plot containing eight solid lines of with seven colors. The first color is repeated.

配列 ColorOrder を、4 色の格納された新しい配列に置き換えます (関数 colororder を使用してこの配列を置き換えることも可能)。次に、配列 LineStyleOrder を、2 種類のライン スタイルが格納された新しい cell 配列に置き換えます。ラインに新しい色とライン スタイルが自動的に使用されます。

% Updates existing plots in R2019b or later
ax.ColorOrder = [1 0 0; 0 1 0; 0 0 1; 0 0 0];
ax.LineStyleOrder = {'-','--'};

Plot containing eight lines with four colors and two line styles.

配列 ColorOrder および配列 LineStyleOrder のインデックスの変更

プロット オブジェクトの SeriesIndex プロパティを変更すると、配列 ColorOrder および配列 LineStyleOrder のインデックスが変更されます。インデックスの変更は、あるオブジェクトの色、ライン スタイルおよびマーカーを他のオブジェクトと一致させる場合に便利です。

たとえば、波長と位相を変化させた 4 つの正弦波をループでプロットします。それぞれの正弦波について、波長に基づいて SeriesIndex プロパティを設定します。結果のプロットで、波長の同じ正弦波は色も同じになります。

x = linspace(0,10,200);
ax = axes;
hold on
for phi = 0:3:3
    for t = 1:2
        plot(x,sin(x/t + phi),'SeriesIndex',t) % Requires R2020a or later
    end
end
hold off

Plot containing two blue sine waves and two orange sine waves.

正弦波のうち 1 対を目立たせるには、色の順序を別の色の組に変更します。

ax.ColorOrder = [0.8 0.8 0.9; 0.2 0.2 0.8];

Plot containing two light purple sine waves and two dark purple sine waves.

参考

関数

プロパティ

関連するトピック