Main Content

グラフのノード名、エッジの重みおよび他の属性の追加

この例では、graphdigraph を使用して作成したグラフ内のノードとエッジに属性を追加する方法を示します。ノード名またはエッジの重みは、最初に graph または digraph を呼び出してグラフを作成する際に指定できます。しかしこの例では、グラフを作成した後に属性を追加する方法を示します。

グラフの作成

有向グラフを作成します。st 内の対応する要素は、グラフ内の各エッジのソース ノードとターゲット ノードを定義します。

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

    Edges: [5x1 table]
    Nodes: [4x0 table]

ノード名の追加

G.Nodes table に変数 Name を追加することにより、グラフにノード名を追加します。N = numnodes(G) である場合に、変数 Name は、文字ベクトルまたは string 配列の N1 列の cell 配列として指定しなければなりません。ノード名を追加する際、変数 Name を使用することは重要です。それは、この変数名が一部のグラフ関数で特別に扱われるからです。

G.Nodes.Name = {'First' 'Second' 'Third' 'Fourth'}';

新しい Nodes table を表示します。

G.Nodes
ans=4×1 table
       Name   
    __________

    {'First' }
    {'Second'}
    {'Third' }
    {'Fourth'}

テーブル インデックスを使用してノード 1 と 4 の名前を表示します。

G.Nodes.Name([1 4])
ans = 2x1 cell
    {'First' }
    {'Fourth'}

エッジの重みの追加

G.Edges table に変数 Weight を追加することにより、グラフにエッジの重みを追加します。変数 WeightM 行 1 列の数値ベクトルでなければなりません。ここで、M = numedges(G) です。エッジの重みを追加する際、変数 Weight を使用することは重要です。それは、この変数名が一部のグラフ関数で特別に扱われるからです。

G.Edges.Weight = [10 20 30 40 50]';

新しい Edges table を表示します。

G.Edges
ans=5×2 table
            EndNodes            Weight
    ________________________    ______

    {'First' }    {'Second'}      10  
    {'First' }    {'Fourth'}      20  
    {'Second'}    {'Third' }      30  
    {'Second'}    {'Fourth'}      40  
    {'Third' }    {'Fourth'}      50  

table インデックスを使用して G.Edges の 1 行目と 3 行目を表示します。

G.Edges([1 3],:)
ans=2×2 table
            EndNodes            Weight
    ________________________    ______

    {'First' }    {'Second'}      10  
    {'Second'}    {'Third' }      30  

カスタム属性の追加

原則として、G.NodesG.Edges にはグラフのノードまたはエッジの属性を定義するどのような変数も追加できます。subgraphreordernodes などの関数ではグラフ属性が保持されるため、カスタム属性を追加すると便利です。

たとえば、Power という名前の変数を G.Edges に追加して、各エッジが 'on' または 'off' のいずれであるかを示します。

G.Edges.Power = {'on' 'on' 'on' 'off' 'off'}';
G.Edges
ans=5×3 table
            EndNodes            Weight     Power 
    ________________________    ______    _______

    {'First' }    {'Second'}      10      {'on' }
    {'First' }    {'Fourth'}      20      {'on' }
    {'Second'}    {'Third' }      30      {'on' }
    {'Second'}    {'Fourth'}      40      {'off'}
    {'Third' }    {'Fourth'}      50      {'off'}

Size という名前の変数を G.Nodes に追加して、各ノードの物理サイズを示します。

G.Nodes.Size = [10 20 10 30]';
G.Nodes
ans=4×2 table
       Name       Size
    __________    ____

    {'First' }     10 
    {'Second'}     20 
    {'Third' }     10 
    {'Fourth'}     30 

変数エディターでのテーブルの変更

NodesEdges はどちらも table であるため、変数エディターを使用して対話的にその table を表示または編集できます。詳細については、変数の作成と編集を参照してください。

グラフ プロットにおけるノードとエッジのラベル付け

グラフをプロットする際、G.NodesG.Edges 内の変数を使用してグラフのノードとエッジにラベル付けができます。これらの変数の要素数は正確であることが既に保証されているため、この方法は便利です。

グラフをプロットし、G.Edges の変数 Power を使用してエッジのラベル付けを行います。G.Nodes の変数 Size を使用してノードのラベル付けを行います。

p = plot(G,'EdgeLabel',G.Edges.Power,'NodeLabel',G.Nodes.Size)

Figure contains an axes object. The axes object contains an object of type graphplot.

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: {'10'  '20'  '10'  '30'}
     EdgeLabel: {'on'  'on'  'on'  'off'  'off'}
         XData: [2 1.5000 1 2]
         YData: [4 3 2 1]
         ZData: [0 0 0 0]

  Use GET to show all properties

参考

|

関連するトピック