ドキュメンテーション

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

plot

グラフのノードとエッジをプロット

説明

plot(G) は、グラフ G のノードとエッジをプロットします。

plot(G,LineSpec) は、ライン スタイル、マーカー記号、色を設定します。たとえば、plot(G,'-or') は、ノードに赤の円、エッジに赤のラインを使用します。

plot(___,Name,Value) は、前述の構文にある任意の入力引数を組み合わせて、1 つ以上の名前と値のペアの引数で指定される追加のオプションを使用します。たとえば、plot(G,'Layout','circle') はグラフの環状レイアウトをプロットし、plot(G,'XData',X,'YData',Y,'ZData',Z) はグラフ ノードの (X,Y,Z) 座標を指定します。

plot(ax,___) は、現在の座標軸 (gca) の代わりに ax によって指定される座標軸にプロットします。オプションの ax は、前述の構文の任意の入力引数の組み合わせより前に指定できます。

h = plot(___)GraphPlot オブジェクトを返します。このオブジェクトは、プロットしたグラフのプロパティの検査や調整に使用します。

すべて折りたたむ

スパース隣接行列を使用してグラフを作成し、そのグラフをプロットします。

n = 10;
A = delsq(numgrid('L',n+2));
G = graph(A,'omitselfloops')
G = 
  graph with properties:

    Edges: [130x2 table]
    Nodes: [75x0 table]

plot(G)

グラフを作成してプロットします。LineSpec 入力を指定して、グラフ プロットの MarkerNodeColorLineStyle のすべてまたは一部を変更します。

G = graph(bucky);
plot(G,'-.dr','NodeLabel',{})

有向グラフを作成し、'force' レイアウトを使用してそのグラフをプロットします。

G = digraph(1,2:5);
G = addedge(G,2,6:15);
G = addedge(G,15,16:20)
G = 
  digraph with properties:

    Edges: [19x1 table]
    Nodes: [20x0 table]

plot(G,'Layout','force')

重み付きグラフを作成します。

s = [1 1 1 1 1 2 2 7 7 9 3 3 1 4 10 8 4 5 6 8];
t = [2 3 4 5 7 6 7 5 9 6 6 10 10 10 11 11 8 8 11 9];
weights = [1 1 1 1 3 3 2 4 1 6 2 8 8 9 3 2 10 12 15 16];
G = graph(s,t,weights)
G = 
  graph with properties:

    Edges: [20x2 table]
    Nodes: [11x0 table]

カスタム ノード座標を使用して、グラフをプロットします。XData で x 座標、YData で y 座標、ZData で z 座標を指定します。EdgeLabel を使用して、エッジにその重みのラベルを付けます。

x = [0 0.5 -0.5 -0.5 0.5 0 1.5 0 2 -1.5 -2];
y = [0 0.5 0.5 -0.5 -0.5 2 0 -2 0 0 0];
z = [5 3 3 3 3 0 1 0 0 1 0];
plot(G,'XData',x,'YData',y,'ZData',z,'EdgeLabel',G.Edges.Weight)

上方からグラフを表示します。

view(2)

重み付きグラフを作成します。

s = [1 1 1 1 2 2 3 4 4 5 6];
t = [2 3 4 5 3 6 6 5 7 7 7];
weights = [50 10 20 80 90 90 30 20 100 40 60];
G = graph(s,t,weights)
G = 
  graph with properties:

    Edges: [11x2 table]
    Nodes: [7x0 table]

グラフをプロットし、エッジにその重みのラベルを付け、エッジの幅を重みに比例させます。再スケーリングしたバージョンのエッジの重みを使用して、最も広いライン幅が 5 になるように各エッジのライン幅を決定します。

LWidths = 5*G.Edges.Weight/max(G.Edges.Weight);
plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',LWidths)

有向グラフを作成します。ノードとエッジのカスタム ラベルを使用してグラフをプロットします。

s = [1 1 1 2 2 3 3 4 4 5 6 7];
t = [2 3 4 5 6 5 7 6 7 8 8 8];
G = digraph(s,t)
G = 
  digraph with properties:

    Edges: [12x1 table]
    Nodes: [8x0 table]

eLabels = {'x' 'y' 'z' 'y' 'z' 'x' 'z' 'x' 'y' 'z' 'y' 'x'};
nLabels = {'{0}','{x}','{y}','{z}','{x,y}','{x,z}','{y,z}','{x,y,z}'};
plot(G,'Layout','force','EdgeLabel',eLabels,'NodeLabel',nLabels)

有向グラフを作成してプロットします。plot に、GraphPlot オブジェクトのハンドルを返す出力引数を指定します。

s = [1 1 1 2 2 3 3 4 5 5 6 7 7 8 8 9 10 11];
t = [2 3 10 4 12 4 5 6 6 7 9 8 10 9 11 12 11 12];
G = digraph(s,t)
G = 
  digraph with properties:

    Edges: [18x1 table]
    Nodes: [12x0 table]

p = plot(G)

p = 
  GraphPlot with properties:

     NodeColor: [0 0.4470 0.7410]
    MarkerSize: 4
        Marker: 'o'
     EdgeColor: [0 0.4470 0.7410]
     LineWidth: 0.5000
     LineStyle: '-'
     NodeLabel: {1x12 cell}
     EdgeLabel: {}
         XData: [2.5000 1.5000 2.5000 2 3 2 3 3 2.5000 4 3.5000 2.5000]
         YData: [7 6 6 5 5 4 4 3 2 3 2 1]
         ZData: [0 0 0 0 0 0 0 0 0 0 0 0]

  Show all properties

ノードの色とマーカーを変更します。

p.Marker = 's';
p.NodeColor = 'r';

ノードのサイズを増加します。

p.MarkerSize = 7;

エッジのライン スタイルを変更します。

p.LineStyle = '--';

ノードの x 座標と y 座標を変更します。

p.XData = [2 4 1.5 3.5 1 3 1 2.1 3 2 3.1 4];
p.YData = [3 3 3.5 3.5 4 4 2 2 2 1 1 1];

入力引数

すべて折りたたむ

入力グラフ。graph オブジェクトまたは digraph オブジェクトとして指定します。無向グラフの作成には graph を、有向グラフの作成には digraph を使用します。

例: G = graph(1,2)

例: G = digraph([1 2],[2 3])

ライン スタイル、マーカー記号および色。記号の文字ベクトルまたは string ベクトルとして指定します。記号は任意の順序で指定でき、1 つ以上の特性を省略できます。ライン スタイルを省略した場合、プロットではグラフ エッジが実線で表示されます。

例: '--or' は、ノードに赤の円マーカー、エッジに赤の破線を使用します。

例: 'r*' は、ノードに赤のアスタリスクのマーカー、エッジに赤の実線を使用します。

記号ライン スタイル
-実線 (既定の設定)
--破線
:点線
-.一点鎖線
記号マーカー
o
+プラス記号
*アスタリスク
.
x十字
s正方形
d菱形
^上向き三角形
v下向き三角形
>右向き三角形
<左向き三角形
p星形五角形
h星形六角形
記号

y

m

マゼンタ

c

シアン

r

g

b

w

k

axes オブジェクト。axes オブジェクトを指定しない場合、plot は現在の座標軸 (gca) を使用します。

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: p = plot(G,'EdgeColor','r','NodeColor','k','LineStyle','--')

ここでは、グラフのプロパティの一部のみを示します。完全な一覧については、GraphPlot のプロパティ を参照してください。

メモ

ArrowSize は、digraph を使用して作成された有向グラフの表示にのみ影響します。

矢印のサイズ。'ArrowSize' と、ポイント単位の正の値で構成されるコンマ区切りのペアとして指定します。ArrowSize の既定値は、ノード数が 100 以下のグラフでは 7、ノード数が 100 を超えるグラフでは 4 です。

例: 15

エッジ ラインの色データ。'EdgeCData' と、グラフ内のエッジ数に等しい長さをもつベクトルで構成されるコンマ区切りのペアとして指定します。EdgeCData の値は現在のカラーマップの色に線形にマッピングされ、その結果、プロットしたグラフの各エッジが異なる色になります。

エッジの色。'EdgeColor' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'none' — エッジは描画されません。

  • 'flat' — 各エッジの色は EdgeCData の値によって決まります。

  • 行列 — 各行はそれぞれ 1 つのエッジの色を表す RGB 3 成分です。この行列のサイズは numedges(G)3 列です。

  • RGB 3 成分、16 進数カラー コードまたは色名 — 指定した色がエッジで使用されます。

    RGB 3 成分および 16 進数カラー コードは、カスタム色を指定するのに役立ちます。

    • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度値は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

    • 16 進数カラー コードは、ハッシュ記号 (#) で始まり、3 桁または 6 桁の 0 から F までの範囲の 16 進数が続く文字ベクトルまたは string スカラーです。これらの値では大文字小文字は区別されません。したがって、カラー コード '#FF8800''#ff8800''#F80'、および '#f80' は等価です。

    あるいは、名前を使用して一部の一般的な色を指定できます。次の表に、名前の付いた色オプション、等価の RGB 3 成分、および 16 進数カラー コードを示します。

    色名省略名RGB 3 成分16 進数カラー コード外観
    'red''r'[1 0 0]'#FF0000'

    'green''g'[0 1 0]'#00FF00'

    'blue''b'[0 0 1]'#0000FF'

    'cyan' 'c'[0 1 1]'#00FFFF'

    'magenta''m'[1 0 1]'#FF00FF'

    'yellow''y'[1 1 0]'#FFFF00'

    'black''k'[0 0 0]'#000000'

    'white''w'[1 1 1]'#FFFFFF'

    MATLAB® の多くのタイプのプロットで使用されている既定の色の RGB 3 成分および 16 進数カラー コードを次に示します。

    RGB 3 成分16 進数カラー コード外観
    [0 0.4470 0.7410]'#0072BD'

    [0.8500 0.3250 0.0980]'#D95319'

    [0.9290 0.6940 0.1250]'#EDB120'

    [0.4940 0.1840 0.5560]'#7E2F8E'

    [0.4660 0.6740 0.1880]'#77AC30'

    [0.3010 0.7450 0.9330]'#4DBEEE'

    [0.6350 0.0780 0.1840]'#A2142F'

例: plot(G,'EdgeColor','r') は赤のエッジをもつグラフ プロットを作成します。

エッジのラベル。'EdgeLabel' と、数値ベクトル、文字ベクトルの cell 配列、string 配列のいずれかで構成されるコンマ区切りのペアとして指定します。EdgeLabel の長さはグラフのエッジ数と等しくなければなりません。既定では、EdgeLabel は空の cell 配列です (エッジのラベルは表示されない)。

例: {'A', 'B', 'C'}

例: [1 2 3]

例: plot(G,'EdgeLabel',G.Edges.Weight) はグラフ エッジにその重みのラベルを付けます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell | string

グラフのレイアウト メソッド。'Layout' と、次の表のいずれかのオプションで構成されるコンマ区切りのペアとして指定します。この表には、各レイアウト メソッドをさらに調整するために使用できる名前と値のペアも示します。レイアウト固有の名前と値のペアの詳細については、layout のリファレンス ページを参照してください。

オプション説明レイアウト固有の名前と値のペア
'auto' (既定)

グラフのサイズと構造に基づいた、レイアウト メソッドの自動選択。

'circle'

円形レイアウト。中心が原点、半径が 1 の円上にグラフ ノードを配置します。

'Center' — 円形レイアウトの中心ノード

'force'

力指向レイアウト[1]。隣接ノード間に引力、離れたノード間に反発力を使用します。

'Iterations' — 力指向レイアウトの反復回数

'WeightEffect' — レイアウトに対するエッジの重みの影響

'UseGravity' — 複数の要素をもつレイアウトでの重力切り替え

'XStart' — ノードの開始 x 座標

'YStart' — ノードの開始 y 座標

'layered'

ノードの階層型レイアウト [2][3][4]。グラフ ノードを一連の層に配置し、階層構造を表します。既定では、階層は下に進みます (有向非循環グラフの矢印が下を向く)。

'Direction' — 層の方向

'Sources' — 最初の層に含めるノード

'Sinks' — 最後の層に含めるノード

'AssignLayers' — 層の割り当てメソッド

'subspace'

ノードの部分空間埋め込みレイアウト[5]。グラフ ノードを高次の埋め込み部分空間にプロットし、その位置を 2 次元に投影します。既定では、部分空間の次元は 100 とノードの合計値のうち小さい値になります。

'Dimension' — 埋め込む部分空間の次元

'force3'3 次元力指向レイアウト。

'Iterations' — 力指向レイアウトの反復回数

'WeightEffect' — レイアウトに対するエッジの重みの影響

'UseGravity' — 複数の要素をもつレイアウトでの重力切り替え

'XStart' — ノードの開始 x 座標

'YStart' — ノードの開始 y 座標

'ZStart' — ノードの開始 z 座標

'subspace3'3 次元部分空間を埋め込んだレイアウト。

'Dimension' — 埋め込む部分空間の次元

例: plot(G,'Layout','force3','Iterations',10)

例: plot(G,'Layout','subspace','Dimension',50)

例: plot(G,'Layout','layered')

ライン スタイル。'LineStyle' と次の表のライン スタイルのいずれかで構成されるコンマ区切りのペア、またはそのような値の cell 配列または string ベクトルとして指定します。エッジごとに異なるライン スタイルを使用するには、文字ベクトルの cell 配列または string ベクトルを指定します。

文字ライン スタイル結果として得られる線
'-'実線

'--'破線

':'点線

'-.'一点鎖線

'none'ラインなしラインなし

エッジのライン幅。'LineWidth' とポイント単位の正の値で構成されるコンマ区切りのペア、またはそのような値のベクトルとして指定します。グラフのエッジごとに異なるライン幅を使用するには、ベクトルを指定します。

例: 0.75

ノード マーカー記号。'Marker' と次の表の文字ベクトルのいずれかで構成されるコンマ区切りのペア、またはそのような値の cell 配列または string ベクトルとして指定します。既定では、グラフ ノードに円マーカーを使用します。ノードごとに異なるマーカーを使用するには、文字ベクトルの cell 配列、または string ベクトルを指定します。

説明
'o'
'+'プラス記号
'*'アスタリスク
'.'
'x'十字
'square' または 's'正方形
'diamond' または 'd'菱形
'^'上向き三角形
'v'下向き三角形
'>'右向き三角形
'<'左向き三角形
'pentagram' または 'p'星形五角形
'hexagram' または 'h'星形六角形
'none'マーカーなし

例: '+'

例: 'diamond'

ノードのマーカー サイズ。'MarkerSize' とポイント単位の正の値で構成されるコンマ区切りのペア、またはそのような値のベクトルとして指定します。グラフのノードごとに異なるマーカー サイズを使用するには、ベクトルを指定します。MarkerSize の既定値は、ノード数が 100 以下のグラフでは 4、ノード数が 100 を超えるグラフでは 2 です。

例: 10

ノード マーカーの色データ。'NodeCData' と、グラフ内のノード数に等しい長さをもつベクトルで構成されるコンマ区切りのペアとして指定します。NodeCData の値は現在のカラーマップの色に線形にマッピングされ、その結果、プロットしたグラフの各ノードが異なる色になります。

ノードの色。'NodeColor' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'none' — ノードは描画されません。

  • 'flat' — 各ノードの色は NodeCData の値によって決まります。

  • 行列 — 各行はそれぞれ 1 つのノードの色を表す RGB 3 成分です。この行列のサイズは numnodes(G)3 列です。

  • RGB 3 成分、16 進数カラー コードまたは色名 — 指定した色がノードで使用されます。

    RGB 3 成分および 16 進数カラー コードは、カスタム色を指定するのに役立ちます。

    • RGB 3 成分は、色の赤、緑、青成分の強度を指定する 3 成分の行ベクトルです。強度値は [0,1] の範囲でなければなりません。たとえば [0.4 0.6 0.7] のようになります。

    • 16 進数カラー コードは、ハッシュ記号 (#) で始まり、3 桁または 6 桁の 0 から F までの範囲の 16 進数が続く文字ベクトルまたは string スカラーです。これらの値では大文字小文字は区別されません。したがって、カラー コード '#FF8800''#ff8800''#F80'、および '#f80' は等価です。

    あるいは、名前を使用して一部の一般的な色を指定できます。次の表に、名前の付いた色オプション、等価の RGB 3 成分、および 16 進数カラー コードを示します。

    色名省略名RGB 3 成分16 進数カラー コード外観
    'red''r'[1 0 0]'#FF0000'

    'green''g'[0 1 0]'#00FF00'

    'blue''b'[0 0 1]'#0000FF'

    'cyan' 'c'[0 1 1]'#00FFFF'

    'magenta''m'[1 0 1]'#FF00FF'

    'yellow''y'[1 1 0]'#FFFF00'

    'black''k'[0 0 0]'#000000'

    'white''w'[1 1 1]'#FFFFFF'

    MATLAB の多くのタイプのプロットで使用されている既定の色の RGB 3 成分および 16 進数カラー コードを次に示します。

    RGB 3 成分16 進数カラー コード外観
    [0 0.4470 0.7410]'#0072BD'

    [0.8500 0.3250 0.0980]'#D95319'

    [0.9290 0.6940 0.1250]'#EDB120'

    [0.4940 0.1840 0.5560]'#7E2F8E'

    [0.4660 0.6740 0.1880]'#77AC30'

    [0.3010 0.7450 0.9330]'#4DBEEE'

    [0.6350 0.0780 0.1840]'#A2142F'

例: plot(G,'NodeColor','k') は黒のノードをもつグラフ プロットを作成します。

ノードのラベル。'NodeLabel' と、数値ベクトル、文字ベクトルの cell 配列、string 配列のいずれかで構成されるコンマ区切りのペアとして指定します。NodeLabel の長さはグラフのノード数と等しくなければなりません。既定では、NodeLabel はグラフ ノードのノード ID を含む cell 配列です。

  • ノードに名前がない場合 (つまり G.Nodes に変数 Name が含まれない)、ノードのラベルは cell 配列に含まれる値 unique(G.Edges.EndNodes) になります。

  • 名前付きノードの場合、ノードのラベルは G.Nodes.Name' になります。

例: {'A', 'B', 'C'}

例: [1 2 3]

例: plot(G,'NodeLabel',G.Nodes.Name) はノードにその名前のラベルを付けます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell | string

メモ

XDataYData は、各ノードが有効な (x,y) 座標をもつように共に指定しなければなりません。オプションで、3 次元座標の ZData も指定できます。

ノードの x 座標。'XData' と、グラフ内のノード数に等しい長さをもつベクトルで構成されるコンマ区切りのペアとして指定します。

メモ

XDataYData は、各ノードが有効な (x,y) 座標をもつように共に指定しなければなりません。オプションで、3 次元座標の ZData も指定できます。

ノードの y 座標。'YData' と、グラフ内のノード数に等しい長さをもつベクトルで構成されるコンマ区切りのペアとして指定します。

メモ

XDataYData は、各ノードが有効な (x,y) 座標をもつように共に指定しなければなりません。オプションで、3 次元座標の ZData も指定できます。

ノードの z 座標。'ZData' と、グラフ内のノード数に等しい長さをもつベクトルで構成されるコンマ区切りのペアとして指定します。

出力引数

すべて折りたたむ

グラフ プロット。オブジェクトとして返されます。詳細については、GraphPlot を参照してください。

互換性についての考慮事項

すべて展開する

R2018a での動作変更

参照

[1] Fruchterman, T., and E. Reingold. “Graph Drawing by Force-directed Placement.” Software — Practice & Experience. Vol. 21 (11), 1991, pp. 1129–1164.

[2] Gansner, E., E. Koutsofios, S. North, and K.-P Vo. “A Technique for Drawing Directed Graphs.” IEEE Transactions on Software Engineering. Vol.19, 1993, pp. 214–230.

[3] Barth, W., M. Juenger, and P. Mutzel. “Simple and Efficient Bilayer Cross Counting.” Journal of Graph Algorithms and Applications. Vol.8 (2), 2004, pp. 179–194.

[4] Brandes, U., and B. Koepf. “Fast and Simple Horizontal Coordinate Assignment.” LNCS. Vol. 2265, 2002, pp. 31–44.

[5] Y. Koren. “Drawing Graphs by Eigenvectors: Theory and Practice.” Computers and Mathematics with Applications. Vol. 49, 2005, pp. 1867–1888.

R2015b で導入