ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

patch

1 つまたは複数の塗りつぶされた多角形の作成

構文

patch(X,Y,C)
patch(X,Y,Z,C)
patch(FV)
patch(X,Y,C,'PropertyName',propertyvalue...)
patch('PropertyName',propertyvalue,...)
handle = patch(...)

プロパティ

プロパティの一覧については、Patch Propertiesを参照してください。

説明

patch(X,Y,C) は、塗りつぶされた 2 次元の Patch オブジェクトを現在の Axes に追加します。Patch オブジェクトは、頂点の座標で定義される 1 つまたは複数の多角形です。XY の要素は、多角形の頂点を指定します。XYmn 列の行列である場合、MATLAB®m 個の頂点をもつ n 個の多角形を描画します。C はパッチの色を決定します。色の入力要件の詳細は、「パッチの色付け」を参照してください。

MATLAB では、各面が同じ数の頂点をもつ必要はありません。同じ数の頂点をもたない場合、要素数を合わせるために行列 Faces の末尾を不定値 (NaN) で埋めます。閉じていない面をもつ Patch を定義するには、接続しない頂点を定義する行列 Vertices の行に NaN を加えてください。

パッチ オブジェクトの使用の詳細は、「Patch オブジェクトの紹介」を参照してください。

patch(X,Y,Z,C) は、3 次元座標に patch を作成します。座標データが閉じた多角形を定義しなければ、関数 patch は多角形を閉じます。データは、凹面や交点をもつ多角形を定義できます。ただし、個々のパッチの面のエッジが交差する場合、面は一部のみが塗りつぶされることがあります。この場合は、面を小さい多角形に分割することをお勧めします。

patch(FV) は、構造体 FV を使ってパッチを作成します。この構造体は、フィールド verticesfaces、およびオプションの facevertexcdata を含みます。これらのフィールドは、VerticesFacesFaceVertexCData の Patch プロパティに対応します。一意的な頂点とそれらの接続行列のみを指定することで、多くの面をもつ Patch のデータ サイズをかなり減らすことができます。この方法でパッチを指定する例は、「Patch オブジェクト形状の指定」を参照してください。

patch(X,Y,C,'PropertyName',propertyvalue...) は、XY(Z)、および C に加えて、プロパティの名前と値のペアを引数として、追加のパッチ プロパティを指定します。プロパティの詳細は、Patch Properties を参照してください。プロパティは、プロパティの名前と値のペア、構造体配列、セル配列として指定できます (これらのデータ型の指定方法の例は、関数 set および関数 get のリファレンス ページを参照してください)。

patch('PropertyName',propertyvalue,...) は、プロパティの名前と値のペアを使用してすべてのプロパティを指定します。この形式では、色の指定を省略できます。FaceColor プロパティと EdgeColor プロパティに値が明示的に割り当てられていない場合、MATLAB では面とエッジに既定の色を使用するためです。また、この形式では xy、および z 軸の代わりに Faces プロパティと Vertices プロパティを使用してパッチを指定できます。詳細は、「Patch オブジェクト形状の指定」を参照してください。

handle = patch(...) は、作成される Patch オブジェクトのハンドル番号を返します。

関数 fill や関数 area のような塗りつぶしなどを行う高水準関数と異なり、関数 patch は Figure と Axes の NextPlot プロパティの設定をチェックしません。現在の Axes に Patch オブジェクトを追加するのみです。

Patch オブジェクト形状の指定

次の 2 つの例では、2 つの方法を使用して Patch オブジェクトを作成します。

  • xy、および z 座標とカラー データ (XDataYDataZData、および CData プロパティ) を指定します。

  • 頂点、接続行列、およびカラー データ (VerticesFaces、および FaceVertexCData プロパティ) を指定します。

それぞれが 3 つの頂点をもつ 5 つの三角形面を作成します。各頂点には xy、および z 軸を指定します。

xdata = [2 2 0 2 5;
         2 8 2 4 5;
         8 8 2 4 8];
ydata = [4 4 4 2 0;
         8 4 6 2 2;
         4 0 4 0 0];
zdata = ones(3,5);

% Red numbers denote the vertex indices.
% For this example:  
% xindices = [1 4 7 10 13;
%             2 5 8 11 14;
%             3 6 9 12 15];
% Blue numbers denote the face numbers.
patch(xdata,ydata,zdata,'w')

面と頂点を指定して 5 つの三角形面を作成します。

% The Vertices property contains the coordinates of each
% unique vertex defining the patch. The Faces property 
% specifies how to connect these vertices to form each
% face of the patch. More than one face may 
% use a given vertex.
% For this example, five triangles have 11 total vertices, 
% instead of 15. Each row contains 
% the x- and y-coordinates 
% of each vertex.
verts = [2 4; ...
        2 8; ...
        8 4; ...
        8 0; ...
        0 4; ...
        2 6; ...
        2 2; ...
        4 2; ...
        4 0; ...
        5 2; ...
        5 0 ];

% There are five faces, defined by connecting the 
% vertices in the order indicated.
faces = [ ...
        1  2  3; ...
        1  3  4; ...
        5  6  1; ...
        7  8  9; ...
        11 10 4 ];

% Create the patch by specifying the Faces, Vertices,
% and FaceVertexCData properties as well as the
% FaceColor property. Red numbers denote the vertex 
% numbers, as defined in faces. Blue indicate face numbers.
p = patch('Faces',faces,'Vertices',verts,'FaceColor','w');

% Using the previous values for verts and faces, you can 
% create the same patch object using a structure: 
patchinfo.Vertices = verts;
patchinfo.Faces = faces;
patchinfo.FaceColor = 'w';

patch(patchinfo);

パッチの色付け

色を使用して Patch オブジェクトをカスタマイズする方法は多数あります。適切な入力は、次の要素に依存します。

  • エッジの色を変更するかどうか

  • パッチ面が指定された方法:

    • 面と頂点の値を使用

    • xy、および z 軸を使用

以下の項では、さまざまな使用可能なオプションを示します。

エッジの色の指定

以下のオプションは、Patch オブジェクトのエッジの色に適用されます。設定は面の色とは独立していますが、色そのものは各頂点に指定されている色に依存します。マーカーは各頂点の色を示します。色は EdgeColor プロパティを使用して指定します。サンプルの入力コードを使用してオプションを調べるために、まず基底 Patch オブジェクトから作成します。

xdata = [2     2     0     2     5;
         2     8     2     4     5;
         8     8     2     4     8];
ydata = [4     4     4     2     0;
         8     4     6     2     2;
         4     0     4     0     0];
cdata = [15     0     4     6    10;
         1     2     5     7     9;
         2     3     0     8     3];
p = patch(xdata,ydata,cdata,'Marker','o',...
          'MarkerFaceColor','flat',...
          'FaceColor','none')

EdgeColor プロパティの詳細は、Patch Properties ページを参照してください。

目的の外観EdgeColor 値サンプル コード
すべての面のすべてのエッジが同じ色をもちます。このオプションは FaceColor 値には依存しません。

ColorSpec
set(p,'EdgeColor','g')
各エッジは、エッジの前の頂点の色に対応します。エッジごとに 1 つの色が使用されます。このオプションでは、FaceColor プロパティを flat または interp に設定する必要があります。既定の設定では、Patch オブジェクトの作成時に CData を指定した場合、FaceColor プロパティは interp になります。

'flat'
set(p,'EdgeColor','flat',...
    'LineWidth',3)
各エッジは頂点の色に対応し、頂点間で色が内挿されます。このオプションでは、FaceColor プロパティを flat または interp に設定する必要があります。既定の設定では、Patch オブジェクトの作成時に CData を指定した場合、FaceColor プロパティは interp になります。

'interp'
set(gcf,'Renderer','zbuffer')
set(p,'EdgeColor','interp',...
'LineWidth',5)
エッジには色がありません。このオプションは FaceColor 値には依存しません。設定した場合、マーカーは頂点の色を保持します。

'none'
set(p,'EdgeColor','none')

面と頂点の入力行列を使用した面の色の指定

以下のオプションは、面と頂点の入力行列を使用して面を指定した場合の Patch オブジェクトの面の色に適用されます。オプションを調べるために、まず基底 Patch オブジェクトから始めます。

% For this example, there are five triangles (m = 5) 
% sharing eleven unique vertices (k = 11).  
verts = [2 4; ...
        2 8; ...
        8 4; ...
        8 0; ...
        0 4; ...
        2 6; ...
        2 2; ...
        4 2; ...
        4 0; ...
        5 2; ...
        5 0 ];
faces = [1  2  3; ...
         1  3  4; ...
         5  6  1; ...
         7  8  9; ...
         11 10 4];
p = patch('Faces',faces,'Vertices',verts,'FaceColor','b');

関連するプロパティの詳細は、「FaceColor」、FaceVertexCData」、および「CDataMapping」を参照してください。

目的の外観パラメーター値サンプル コード
すべての面が同じ色をもちます。

  • FaceColor: ColorSpec

  • FaceVertexCData: [] (入力なし)

    空の配列は既定値で、FaceColor'flat' または 'interp' に設定されるまで、patch は入力を無視します。

  • 色のソース:truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

set(p,'FaceColor','r')

または

set(p,'FaceColor',[1 0 0])
各面は、カラーマップの選択したセクションから作成されたインデックスに基づいた、単一の一意の色をもちます。

  • FaceColor: 'flat'

  • FaceVertexCData: インデックス値の m 行 1 列の行列

  • 色のソース:colormap の選択した部分

  • CDataMapping: 'scaled'

clear cdata
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60]';
set(p,'FaceColor','flat',...
'FaceVertexCData',cdata,...
'CDataMapping','scaled')
各面は、カラーマップ全体から作成されたインデックスに基づいた、単一の一意の色をもちます。

  • FaceColor: 'flat'

  • FaceVertexCData: インデックス値の m 行 1 列の行列

  • 色のソース: colormap

  • CDataMapping: 'direct'

    'scaled'CData 値を入力する場合の既定値です。Axes の CLim プロパティを変更し、さらに Patch オブジェクトにカラーマップ全体のインデックスを作成させるには、'CDataMapping','direct' を使用します。

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60]';
set(p,'FaceColor','flat',...
'FaceVertexCData',cdata,...
'CDataMapping','direct')
各面は、トゥルーカラー値の入力によって決定された単一の一意の色をもちます。

  • FaceColor: 'flat'

  • FaceVertexCData: 0 から 1 のトゥルーカラー値の m 行 3 列の行列

  • 色のソース:truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

clear cdata 
cdata = [0 0 1 0 0.8;
         0 1 0 0 0.8;
         1 0 1 0 0.8]';
set(p,'FaceColor','flat',...
'FaceVertexCData',cdata)
一意の各頂点は、カラーマップの選択したセクションから作成されたインデックスに基づいた、単一の一意の色をもちます。各面は単一の一意の色をもちますが、エッジは 'flat' または 'interp' の色をもつ場合があります。

  • FaceColor: 'flat'

  • FaceVertexCData: インデックス値の k 行 1 列の行列

  • 色のソース: colormap の選択した部分

  • CDataMapping: 'scaled'

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 ...
60 12 23 40 13 26 24]';
set(p,'FaceColor','flat',...
'FaceVertexCData',cdata,...
'EdgeColor','flat',...
'LineWidth',5,...
'CDataMapping','scaled')
一意の各頂点は、カラーマップ全体から作成されたインデックスに基づいた、単一の一意の色をもちます。各面は単一の一意の色をもちますが、エッジは 'flat' または 'interp' の色をもつ場合があります。

  • FaceColor: 'flat'

  • FaceVertexCData: インデックス値の k 行 1 列の行列

  • 色のソース: colormap

  • CDataMapping: 'direct'

    'scaled'CData 値を入力する場合の既定値です。Axes の CLim プロパティを変更し、さらに Patch オブジェクトにカラーマップ全体のインデックスを作成させるには、'CDataMapping','direct' を使用します。

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 ...
60 12 23 40 13 26 24]';
set(p,'FaceColor','flat',...
'FaceVertexCData',cdata,...
'CDataMapping','direct',...
'EdgeColor','flat',...
'LineWidth',5)
一意の各頂点は、トゥルーカラー値の入力によって決定された単一の一意の色をもちます。各面は単一の一意の色をもちますが、エッジは 'flat' または 'interp' の色をもつ場合があります。

  • FaceColor: 'flat'

  • FaceVertexCData: 0 から 1 のトゥルーカラー値の k 行 3 列の行列

  • 色のソース: truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

clear cdata 
cdata = [0 0 1; 
         0 1 0;
         0 1 1;
         1 0 0;
         1 0 1;
         1 1 0;
         0 0 0;
         0.2 0.2 0.2;
         0.4 0.4 0.4;
         0.6 0.6 0.6;
         0.8 0.8 0.8];
set(p,'FaceColor','flat',...
'FaceVertexCData',cdata,...
'EdgeColor','interp',...
'LineWidth',5)
一意の各頂点は、カラーマップの選択したセクションから作成されたインデックスに基づいた、単一の一意の色をもちます。エッジは 'flat' または 'interp' の色をもっている場合があります。

  • FaceColor: 'interp'

  • FaceVertexCData: インデックス値の k 行 1 列の行列

  • 色のソース: colormap の選択した部分

  • CDataMapping: 'scaled'

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 ...
60 12 23 40 13 26 24]';
set(p,'FaceColor','interp',...
'FaceVertexCData',cdata,...
'EdgeColor','flat',...
'LineWidth',5,...
'CDataMapping','scaled')
一意の各頂点は、カラーマップ全体から作成されたインデックスに基づいた、単一の一意の色をもちます。エッジは 'flat' または 'interp' の色をもっている場合があります。

  • FaceColor: 'interp'

  • FaceVertexCData: インデックス値の k 行 1 列の行列

  • 色のソース: colormap

  • CDataMapping: 'direct'

    'scaled'CData 値を入力する場合の既定値です。Axes の CLim プロパティを変更し、さらに Patch オブジェクトにカラーマップ全体のインデックスを作成させるには、'CDataMapping','direct' を使用します。

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 ...
 60 12 23 40 13 26 24]';
set(p,'FaceColor','interp',...
'FaceVertexCData',cdata,...
'CDataMapping','direct',...
'EdgeColor','flat',...
'LineWidth',5)
一意の各頂点は、トゥルーカラー値の入力によって決定された単一の一意の色をもちます。エッジは 'flat' または 'interp' の色をもっている場合があります。

  • FaceColor: 'interp'

  • FaceVertexCData: 0 から 1 のトゥルーカラー値の k 行 3 列の行列

  • 色のソース: truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

clear cdata 
cdata = [0 0 1; 
         0 1 0;
         0 1 1;
         1 0 0;
         1 0 1;
         1 1 0;
         0 0 0;
         0.2 0.2 0.2;
         0.4 0.4 0.4;
         0.6 0.6 0.6;
         0.8 0.8 0.8];
set(p,'FaceColor','interp',...
'FaceVertexCData',cdata,...
'EdgeColor','interp',...
'LineWidth',5)

x、y、および z 座標入力を使用した面の色の指定

以下のオプションは、xy、および z 座標を使用して面を指定した場合の Patch オブジェクトの面の色に適用されます。オプションを調べるために、まず基底 Patch オブジェクトから始めます。

% For this example, there are five (m=5) triangles (n=3). 
% The total number of vertices is mxn, or k = 15. 
xdata = [2 2 0 2 5;
         2 8 2 4 5;
         8 8 2 4 8];
ydata = [4 4 4 2 0;
         8 4 6 2 2;
         4 0 4 0 0];
zdata = ones(3,5);
p = patch(xdata,ydata,zdata,'b')

関連するプロパティの詳細は、「FaceColor」、CData」、および「CDataMapping」を参照してください。

目的の外観パラメーター値サンプル コード
すべての面が同じ色をもちます。

  • FaceColor: ColorSpec

  • CData: [] (入力なし)

  • 色のソース:truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

set(p,'FaceColor','r')

または

set(p,'FaceColor',[1 0 0])
各面は、カラーマップの選択したセクションから作成されたインデックスに基づいた、単一の一意の色をもちます。

  • FaceColor: 'flat'

  • CData: インデックス値の m 行 1 列の行列

  • 色のソース:colormap の選択した部分

  • CDataMapping: 'scaled'

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60];
set(p,'FaceColor','flat',...
'CData',cdata,...
'CDataMapping','scaled')
各面は、カラーマップ全体から作成されたインデックスに基づいた、単一の一意の色をもちます。

  • FaceColor: 'flat'

  • CData: インデックス値の m 行 1 列の行列

  • 色のソース: colormap

  • CDataMapping: 'direct'

    'scaled'CData 値を入力する場合の既定値です。Axes の CLim プロパティを変更し、さらに Patch オブジェクトにカラーマップ全体のインデックスを作成させるには、'CDataMapping','direct' を使用します。

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60];
set(p,'FaceColor','flat',...
'CData',cdata,...
'CDataMapping','direct')
各面は、トゥルーカラー値の入力によって決定された単一の一意の色をもちます。

  • FaceColor: 'flat'

  • CData: 0 から 1 のトゥルーカラー値の m x 1 x 3 の行列

  • 色のソース:truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

clear cdata 
cdata(:,:,1) = [0 0 1 0 0.8];
cdata(:,:,2) = [0 0 0 0 0.8];
cdata(:,:,3) = [1 1 1 0 0.8];
set(p,'FaceColor','flat',...
'CData',cdata)
一意の各頂点は、カラーマップの選択したセクションから作成されたインデックスに基づいた、単一の一意の色をもちます。各面は単一の一意の色をもちますが、エッジは 'flat' または 'interp' の色をもつ場合があります。

  • FaceColor: 'flat'

  • CData: インデックス値の mn 列の行列

  • 色のソース: colormap の選択した部分

  • CDataMapping: 'scaled'

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60;
         12 23 40 13 26;
         24 8 1 65 42];
set(p,'FaceColor','flat',...
'CData',cdata,...
'EdgeColor','flat',...
'LineWidth',5,...
'CDataMapping','scaled')
一意の各頂点は、カラーマップ全体から作成されたインデックスに基づいた、単一の一意の色をもちます。各面は単一の一意の色をもちますが、エッジは 'flat' または 'interp' の色をもつ場合があります。

  • FaceColor: 'flat'

  • CData: インデックス値の mn 列の行列

  • 色のソース: colormap

  • CDataMapping: 'direct'

    'scaled'CData 値を入力する場合の既定値です。Axes の CLim プロパティを変更し、さらに Patch オブジェクトにカラーマップ全体のインデックスを作成させるには、'CDataMapping','direct' を使用します。

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60;
         12 23 40 13 26;
         24 8 1 65 42];
set(p,'FaceColor','flat',...
'CData',cdata,...
'CDataMapping','direct',...
'EdgeColor','flat',...
'LineWidth',5)
各頂点は、トゥルーカラー値の入力によって決定された単一の一意の色をもちます。各面は単一の一意の色をもちますが、エッジは 'flat' または 'interp' の色をもつ場合があります。

  • FaceColor: 'flat'

  • CData: 0 から 1 のトゥルーカラー値の m x n x 3 の行列

  • 色のソース: truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

clear cdata 
cdata(:,:,1) = [0 0 1 0 0.8;
                0 0 1 0.2 0.6;
                0 1 0 0.4 1];

cdata(:,:,2) = [0 0 0 0 0.8;
                1 1 1 0.2 0.6;
                1 0 0 0.4 0];

cdata(:,:,3) = [1 1 1 0 0.8;
                0 1 0 0.2 0.6;
                1 0 1 0.4 0];
set(p,'FaceColor','flat',...
'CData',cdata,...
'EdgeColor','interp',...
'LineWidth',5)
各頂点は、カラーマップの選択したセクションから作成されたインデックスに基づいた、単一の一意の色をもちます。エッジは 'flat' または 'interp' の色をもっている場合があります。

  • FaceColor: 'interp'

  • CData: インデックス値の mn 列の行列

  • 色のソース: colormap の選択した部分

  • CDataMapping: 'scaled'

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60;
         12 23 40 13 26;
         24 8 1 65 42];
set(p,'FaceColor','interp',...
'CData',cdata,...
'EdgeColor','flat',...
'LineWidth',5,...
'CDataMapping','scaled')
各頂点は、カラーマップ全体から作成されたインデックスに基づいた、単一の一意の色をもちます。エッジは 'flat' または 'interp' の色をもっている場合があります。

  • FaceColor: 'interp'

  • CData: インデックス値の mn 列の行列

  • 色のソース: colormap

  • CDataMapping: 'direct'

    'scaled'CData 値を入力する場合の既定値です。Axes の CLim プロパティを変更し、さらに Patch オブジェクトにカラーマップ全体のインデックスを作成させるには、'CDataMapping','direct' を使用します。

clear cdata 
set(gca,'CLim',[0 40])
cdata = [15 30 25 2 60;
        12 23 40 13 26;
        24 8 1 65 42];
set(p,'FaceColor','interp',...
'CData',cdata,...
'CDataMapping','direct',...
'EdgeColor','flat',...
'LineWidth',5)
各頂点は、トゥルーカラー値の入力によって決定された単一の一意の色をもちます。エッジは 'flat' または 'interp' の色をもっている場合があります。

  • FaceColor: 'interp'

  • CData: 0 から 1 のトゥルーカラー値の m x n x 3 の行列

  • 色のソース: truecolor

  • CDataMapping: 'direct' または 'scaled'

    'scaled' は既定値ですがいずれも結果には影響しません。

clear cdata 
cdata(:,:,1) = [0.8 0.1 0.2
    0.9 0.3 1;
    0.1 0.5 0.9;
    0.9 1 0.5;
    0.6 0.9 0.8];

cdata(:,:,2) =[0.1 0.6 0.7;
    0.4 0.1 0.7;
    0.9 0.8 0.3;
    0.7 0.9 0.6;
    0.9 0.6 0.1];

cdata(:,:,3) =[0.7 0.8 0.4;
    0.1 0.6 0.3;
    0.2 0.3 0.7;
    0.0 0.9 0.7;
    0.0 0.0 0.1];
set(p,'FaceColor','interp',...
'CData',cdata,...
'EdgeColor','interp',...
'LineWidth',5)

参考

| | | | | | | | | |

チュートリアル

この情報は役に立ちましたか?