Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

プロットの色、ライン スタイルおよびマーカーの制御

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

たとえば、次のコードでは、赤の実線と、円形のマーカーが付いた緑の破線をプロットします。

plot([0 1 2],'-r')
hold on
plot([2 1 0],'--og')
hold off

また、オブジェクトを作成した後にそのプロパティを設定して、色、ライン スタイルおよびマーカーを変更することもできます。たとえば、次のコードでは、ラインを作成してから、そのラインを円形のマーカーが付いた緑の破線に変更しています。

p = plot([0 1 2]);
p.Color = 'g';
p.LineStyle = '--';
p.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.

参考

関数

プロパティ