一般的なグラフの描画
GraphPlotおよび
GraphPlot3Dは,視覚的にアピールするグラフの2D/3Dレイアウトを計算し,プロットする.これらの関数は非常に大きいグラフで使えるよう設計されており,連結グラフも非連結グラフも扱うことができる.
| GraphPlot[{vi1->vj1,vi2->vj2,...}] | 頂点vik が頂点vjk と接続しているグラフのプロットを生成する |
| GraphPlot[{{vi1->vj1,lbl1},...}] | ラベルlblk をグラフ中の辺に関連付ける |
| GraphPlot[m] | 隣接行列m で表されるグラフのプロットを生成する |
| GraphPlot3D[{vi1->vj1,vi2->vj2,...}] |
| 頂点vik が頂点vjk と接続しているグラフの3Dプロットを生成する |
| GraphPlot3D[{{vi1->vj1,lbl1},...}] | ラベルlblk をグラフ中の辺に関連付ける |
| GraphPlot3D[m] | 隣接行列m で表されるグラフの3Dプロットを生成する |
グラフ描画関数
次は,規則のリストで指定されたグラフをプロットする.
| Out[1]= |  |
|
非連結グラフでは,個々の要素が視覚的にアピールする形に並べられている.
| Out[2]= |  |
|
| Out[4]= |  |
|
浮動小数点の相違のため,
GraphPlotの出力はプラットフォームによって若干異なることがある.
GraphPlotとGraphPlot3Dのオプション
GraphPlotとGraphPlot3Dのオプション
DirectedEdges
オプション
DirectedEdgesは,辺を矢印として描くかどうかを指定する.このオプションが取り得る値は
Trueまたは
Falseである.このオプションのデフォルト値は
Falseである.
| Out[5]= |  |
|
| Out[3]= |  |
|
EdgeLabeling
オプション
EdgeLabelingは,辺に与えられたラベルを表示するかどうか,また表示する場合はどのようにするかを指定する.このオプションが取り得る値は
True,
Falseまたは
Automaticである.このオプションのデフォルト値は
Trueで,指定された辺のラベルをグラフに表示する.
EdgeLabeling->Automaticでは,ラベルはツールチップとして表示される.
| Out[6]= |  |
|
下では辺のラベルはツールチップとして示される.カーソルを頂点3と頂点6の間の辺の上に置くと,ツールチップが見られる.
| Out[7]= |  |
|
あるいは, Tooltip[vi->vj, lbl]を使って辺のツールチップを指定する.カーソルを頂点3と頂点6の間の辺の上,および頂点3と頂点5の間の辺のラベル上に置くとツールチップが見られる.
| Out[8]= |  |
|
3Dの辺に与えられたラベルを表示するためには,
EdgeRenderingFunctionを使う必要がある.詳細は
後ほど解説する.
EdgeRenderingFunction
オプション
EdgeRenderingFunctionはグラフの辺の視覚的表現を指定する.このオプションが取り得る値は
Automatic,
None,グラフィックスプリミティブと指示子を適切に組み合せたものを与える関数である.デフォルト設定の
Automaticでは,各辺が暗赤色で示される.
EdgeRenderingFunction->Noneでは辺は描画されない.
| Out[9]= |  |
|
EdgeRenderingFunction->g のとき,各辺は関数
g で与えられるグラフィックスプリミティブとグラフィックス指示子で描画される.この関数は
g[{ri, ..., rj}, {vi, vj}, lblij, ...]という形式で3つ以上の引数を取ることができ,
ri と
rj は辺の始点と終点の座標,
vi と
vj は最初の頂点と最後の頂点,
lblij は辺に指定された任意のラベルあるいは
Noneである.
EdgeRenderingFunction->g の明示的な設定値は
EdgeLabelingと
DirectedEdgesの設定値に優先する.
辺が頂点から0.1(グラフの座標系において)後退した灰色の矢印でプロットされている.
| Out[10]= |  |
|
これは辺のラベルを生成するか,グラフの記述で与えられたラベルを表示する.
| Out[11]= |  |
|
ここでは直線は黒で描かれ,その他の線(2本の多重線と1本の自己ループ)は赤で描かれている.辺の長さの70%のところにラベルを加えるのに GraphUtilitiesパッケージの LineScaledCoordinate関数が使われている.
| Out[13]= |  |
|
次は,頂点には球を,辺には円柱を使った3Dグラフをプロットする.
| Out[14]= |  |
|
これは,辺がバネで頂点は球で描かれているグラフをプロットする.
| Out[16]= |  |
|
| Out[18]= |  |
|
| Out[11]= |  |
|
| Out[10]= |  |
|
Method
GraphPlotと
GraphPlot3Dで使えるアルゴリズムは
Methodオプションで
Method->"name"あるいは
Method->{"name", opt1->val1, ...}として指定することができる.ここで
opti-> vali は,別の
セクションで記述されているようにメソッド特定のオプションである.
Method->Automaticでは,木には
"RadialDrawing"が,その他には
"SpringElectricalEmbedding"が使われる.
| Automatic | 問題に適したメソッドが自動的に選ばれる |
| "CircularEmbedding" | 頂点を円形に並べる |
| "HighDimensionalEmbedding" | 高次埋込み法を呼び出す.この方法では,まず,頂点とk 個の中心のグラフ距離に基づいて,グラフを高次元空間でレイアウトする.次にこのレイアウトが,主成分分析の線形結合を使って2次元空間あるいは3次元空間に投影される |
| "RadialDrawing" | 木または木構造のグラフに適した放射線状描画法を呼び出す.グラフが木ではない場合,まず全域木が構成され,次に全域木の放射状描画を使ってグラフが描画される |
| "RandomEmbedding" | 頂点をランダムに並べる |
| "SpiralEmbedding" | 頂点をらせん状に並べる.3Dでは,球面状に頂点を等間隔で並べる |
| "SpringElectricalEmbedding" | バネ電気埋込み法を呼び出す.このモデルでは,近接する頂点は,互いに両者の物理的距離に比例する引力の影響を受ける.頂点はすべて互いの物理的距離に反比例する反発的な電気力の影響を受ける.全体としてのエネルギーは最小になる |
| "SpringEmbedding" | バネ埋込み法を呼び出す.このモデルでは,頂点は,まるでバネで繋がれているかの様に,他の頂点の引力あるいは反発力のどちらかの影響を受ける.理想的なバネの長さは頂点間のグラフ距離に等しい.バネの力は最小になる |
Methodオプションの有効な値
次は,デフォルトメソッドを使ってペテルセングラフを描画する.
| Out[19]= |  |
|
次は, "SpringEmbedding"アルゴリズムを使ってグラフを描画する.
| Out[20]= |  |
|
次は, "HighDimensionalEmbedding"アルゴリズムを使ってグラフを描画する.
| Out[21]= |  |
|
次は "CircularEmbedding"メソッドを使って頂点が30個のグラフを描画する.
| Out[22]= |  |
|
次は, "SpiralEmbedding"メソッドを使って30個の頂点のグラフを3Dで描画する.
| Out[23]= |  |
|
次は "RandomEmbedding"メソッドを使ってグラフを描画する.
| Out[24]= |  |
|
Combinatorica の座標を使い, Combinatorica パッケージ形式で指定されたグラフを描画する.
| Out[26]= |  |
|
MultiedgeStyle
オプション
MultiedgeStyleは,2つの頂点間の多重辺を描くかどうかを指定する.
MultiedgeStyleが取り得る値は
Automatic(デフォルト),
True,
False,正の実数である. デフォルト設定の
MultiedgeStyle->Automaticでは,規則のリストで指定されたグラフの多重辺が表示されるが,.
MultiedgeStyle->
では,多重辺はスケールされた距離

に広がる.
デフォルトでは,グラフが規則のリストとして与えられている場合に多重辺が表示される.
| Out[27]= |  |
|
しかし,多重辺が隣接行列で指定されている場合には表示されない.
| Out[28]= |  |
|
| Out[29]= |  |
|
PackingMethod
オプション
PackingMethodは非連結要素のパッキングに使用するメソッドを指定する.このオプションで取ることのできる値は
Automatic(デフォルト),
"ClosestPacking",
"ClosestPackingCenter",
"Layered",
"LayeredLeft",
"LayeredTop",
"NestedGrid"である.
PackingMethod->"ClosestPacking"ではポリオミノ法[6]を左上から開始し,要素ができるだけ近付くようにパックされる.
PackingMethod->"ClosestPackingCenter"では,要素は中央から開始してパックされる.
PackingMethod->"Layered"では,左上から開始し,層にパックされる.
PackingMethod->"LayeredLeft"あるいは
PackingMethod->"LayeredTop"では,要素はそれぞれ上または左から開始され,層にパックされる.
PackingMethod->"NestedGrid"では,要素はネストされた格子に配列される.一般の効率的なデフォルト設定は
PackingMethod->"Layered"であり,パッキングは最大の境界ボックス領域の要素から始まる.
| Out[31]= |  |
|
次は,非連結要素を "ClosestPackingCenter"法でパッキングする.
| Out[33]= |  |
|
パッキングは
PackingMethodのサブオプションを使って調整することができる.サブオプション"
"Padding"は要素間に許されるスペースを指定するもので,可能な値は
Automatic(デフォルト),非負の数のどちらかである.サブオプション
"PaddingFunction"も要素間に許されるスペースを指定するものであり,
"Padding"をオーバーライドする.これは
{{w1, h1}, ...}という形式のリストを取る.それぞれの値は要素の境界ボックスの幅と高さであり,非負の数を返す.オプション
PackingMethod->"ClosestPacking"および
PackingMethod->"ClosestPackingCenter"でも
"PolyominoNumber"サブオプションを使うことができる.このサブオプションはそれぞれの非連結要素を近似するのに使われるポリオミノの平均の数を指定する.
"PolyominoNumber"サブオプションで取れる値は
Automatic(デフォルト.通常
"PolyominoNumber"を100に設定)か正の整数である.小さい
"PolyominoNumber"は通常小さい要素が大きい要素の間に埋め込まれることを許さないという効果がある.
| Out[35]= |  |
|
5ポリオミノの平均を使って書く要素を近似するよう指定する.
| Out[37]= |  |
|
PlotRangePadding
PlotStyle
PlotStyleは
GraphPlotおよび
GraphPlot3Dにより継承されるグラフィックス関数に共通のオプションである.
PlotStyleはオブジェクトを描画するスタイルを指定する.
ここでは,辺が太めの線で描かれている.辺も頂点も赤でラベル付けされている.
| Out[38]= |  |
|
SelfLoopStyle
オプション
SelfLoopStyleは,自分自身とリンクしている頂点のループをどのように描くかどうか,またどのように描くかを指定する.このオプションで取れる値は,
Automatic(デフォルト),
True,
False,正の実数のいずれかである.
SelfLoopStyle->Automaticでは,グラフが隣接行列ではなく規則のリストにより指定されている場合に,自己ループが表示される.
SelfLoopStyle->
では,直径(平均の辺の長さに対する)

で自己ループが描画される.
デフォルトでは,自己ループは規則のリストで指定されたグラフに対して表示される.
| Out[39]= |  |
|
グラフが隣接行列で指定されると,自己ループは表示されない.
| Out[40]= |  |
|
| Out[41]= |  |
|
VertexCoordinateRules
オプション
VertexCoordinateRulesは頂点座標を指定する.取り得る値は,
None,座標のリスト,あるいは選択された/すべての座標を指定する規則のリストである.
次は,既知の座標を使ってペテルセン(Petersen)グラフを描画する.
| Out[42]= |  |
|
"SpringEmbedding"アルゴリズムを使って,上と同じグラフの頂点座標を計算する.
| Out[43]= |  |
|
| Out[44]= |  |
|
| Out[12]= |  |
|
x 座標を固定することで2部グラフを描画する.非連結要素を連結するために,「アンカー」を加える.
| Out[3]= |  |
|
2部グラフが連結されると,左や右のアンカーで拡張しなくてもずっとよく動作する.
| Out[4]= |  |
|
VertexLabeling
オプション
VertexLabelingは頂点の名前をラベルとして表示するかどうかを指定する.このオプションで取れる値は,
True,
False,
Automatic(デフォルト),
Tooltipのいずれかである.
VertexLabeling->Trueではラベルが表示される.隣接行列で指定されたグラフでは,頂点ラベルは連続した整数
1, 2, ..., n(ここで
n は行列の大きさ)を取る.規則のリストで指定されたグラフでは,ラベルは規則で使われた式である.
VertexLabeling->Falseは各頂点を点として表示する.
VertexLabeling->Tooltipは各頂点を点として表示するが,ツールチップでその名前を表示する.
VertexLabeling->Automaticは各頂点を点として表示し,頂点の数が多過ぎなければその名前をツールチップで表示する.また,規則のリストの任意の場所で
Tooltip[vk, vlbl]を使うと,頂点
vkのツールチップを指定することができる.
隣接行列の指標として与えられたラベルを持つグラフを描画する.
| Out[45]= |  |
|
| Out[46]= |  |
|
頂点3と5に別のラベルを指定する.この頂点の上にカーソルを置くとラベルを見ることができる.
| Out[47]= |  |
|
以下は頂点を点としてプロットし,ツールチップに頂点名を表示する.頂点の上にカーソルを置くと,ラベルが見える.
| Out[48]= |  |
|
VertexRenderingFunction
オプション
VertexRenderingFunctionは,グラフの辺のグラフィカルな表現を指定する.このオプションで取り得る値は,
Automatic,
None,あるいはグラフィックスプリミティブおよび指示子の適切な組合せを与える関数である.デフォルト設定の
Automaticでは,頂点は点として描かれ,頂点の名前はツールチップで表示される.
デフォルトでは,頂点は点として表示され,ツールチップでラベル付けされる.ツールチップを見るためにはカーソルを頂点に置く.
| Out[49]= |  |
|
| Out[50]= |  |
|
VertexRenderingFunction->g では,各頂点が
g[ri, vi, ...]で与えられるグラフィックスプリミティブで描画される.
ri は頂点の座標で,
vi は頂点のラベルである.
VertexRenderingFunction->g の明示的な設定値は
VertexLabelingの設定値に優先する.
| Out[51]= |  |
|
| Out[53]= |  |
|
すべてのメソッドに共通のサブオプション
すべての描画メソッドで,メソッドのサブオプション
"Rotation"を使うことができる.これはデフォルト方向からラジアンで所望の時計回りの回転量を指定する.このオプションは任意の数値か
Falseを取る.デフォルトは0である.
GraphPlotと
GraphPlot3Dでは,デフォルトの向きは整列ステップにより導出される.ここでは主軸が見付けられ,グラフ描画は
x 軸で整列する.しかし,
"Rotation"->Falseが指定されると,このステップは抜かされる.
| | |
| "Rotation" | 0 | 描画を時計回りにどれだけ回転させるか |
すべてのメソッドに共通のサブオプション
グラフのプロットを時計回りに /2, 0, - /2だけ回転させる.
| Out[2]= |  |
|
| Out[1]= |  |
|
"SpringEmbedding"と"SpringElectricalEmbedding"に共通のサブオプション
SpringEmbeddingメソッドと
SpringElectricalEmbeddingメソッドは両方ともいわゆるForce Directed法に属す.どちらも各頂点の力を計算し,システム全体のエネルギーが最小になるように頂点を力に沿って繰り返し動かす.アルゴリズムの詳細は[8]を参照のこと.両者には次のような共通のオプションがいくつかある.
| | |
| "EnergyControl" | Automatic | 最小化の間,エネルギー関数をどのようの制御するか |
| "InferentialDistance" | Automatic | 力計算でそれより遠い頂点が無視される打切り距離 |
| MaxIterations | Automatic | エネルギーを最小にするために使われる最大反復回数 |
| "RandomSeed" | Automatic | 最初に頂点を置く際に使うランダムシード |
| "RecursionMethod" | Automatic | グラフのレイアウトにマルチレベルのアルゴリズムを使用するかどうか |
| "StepControl" | Automatic | エネルギー最小化の最中にステップ長をどのように変更するか |
| "StepLength" | Automatic | 頂点を動かす際の最初のステップ長 |
| "Tolerance" | Automatic | エネルギーの最小化プロセスを終了するのに使われる許容率 |
"SpringEmbedding"と"SpringElectricalEmbedding"メソッドに共通のサブオプション
"EnergyControl"
サブオプション
"EnergyControl"は,最小化の間のシステムの合計エネルギーへの制限を指定する.有効な値は
Automatic(デフォルト),
"Monotonic"あるいは
"NonMonotonic"である.値が
"Monotonic"のとき,力に沿ったステップは,エネルギーが低下する場合にのみ許容される.値が
"NonMonotonic"のときは,力に沿ったステップはエネルギーが低下しなくても許容される.
"InferentialDistance"
サブオプション
"InferentialDistance"は,頂点間のインタラクションが存在しないと仮定されるようになるカットオフ距離を指定する.可能な値は
Automatic(デフォルト),あるいは正の数値である.
"SpringEmbedding"メソッドでは,頂点
i と
j の間のグラフ距離が
"InferentialDistance"の値よりも大きい場合には,
i と
j の間のバネの反発力・引力は無視される.
"SpringElectricalEmbedding" メソッドでは,頂点
i と
j の間のユークリッド距離が
"InferentialDistance"のオプション値よりも大きければ,
i と
j の間の反発力が無視される.
以下は "SpringElectricalEmbedding"メソッドでランダムな木を描画する.
| Out[2]= |  |
|
もっと小さい(より負の) "RepulsiveForcePower"オプション値を使う( 次のセクションを参照).これでグラフの空白がもっと埋まった.
| Out[22]= |  |
|
"InferentialDistance"オプションに小さい値を使うと,同様の効果が得られる.
| Out[21]= |  |
|
MaxIterations
オプション
MaxIterationsは,エネルギーを最小にするために使う再帰の最大回数を指定する.取り得る値は
Automatic(デフォルト)か正の整数である.
"RandomSeed"
オプション
"RandomSeed"は,最初に頂点を置く場所を計算する乱数ジェネレータの種を指定する.このオプションを変更すると,グラフ描画の方向に影響を与えるが,グラフのレイアウトを変更することもある.このオプションで取り得る値は
Automaticまたは整数である.
次は,Petersonグラフの描画に見られる異なる乱数シードの影響を示す.
| Out[61]= |  |
| Out[62]= |  |
|
"RecursionMethod"
オプション
"RecursionMethod"は,グラフのレイアウトを再帰的な過程で生成するかどうかを指定する.このオプションで取り得る値は
Automatic (デフォルト),
"Multilevel",あるいは
Noneである.
"Multilevel"アルゴリズムでは,グラフは徐々に頂点の少ない粗いグラフになっていく.粗いグラフは最初にレイアウトされ,細かいグラフへと補間され,さらに微調整される.
"Multilevel"のサブオプション
オプション
"Randomize"では,可能な値は
Automatic,
True,
Falseのいずれかである.
"MinSize"では,可能な値は
Automaticか正の数である.
"CoarseningScheme"の場合,実装されるアルゴリズムは,粗い頂点を形成する最大独立頂点集合か,マッチングとも呼ばれる最大独立辺集合のどちらかに基づく.マッチングにおいては,1辺を形成する2頂点が融合し,1つの粗いグラフの頂点を形成する.以下は
"CoarseningScheme"に可能な値である.
| "MaximalIndependentVertexSet" | グラフ距離が3以下ならば最大独立集合の頂点をリンクする |
| "MaximalIndependentVertexSetInjection" |
| グラフ距離が1か2ならば最大独立集合の頂点をリンクする |
| "MaximalIndependentVertexSetRugeStuben" |
| 最大独立頂点集合を生成し,集合内で隣接頂点の多いものを優先し,グラフ距離が3以下ならば集合内の頂点をリンクする |
| "MaximalIndependentVertexSetRugeStubenInjection" |
| グラフ距離が1か2ならば頂点をリンクし,隣接頂点の多いものを優先する |
| "MaximalIndependentEdgeSet" | マッチングの際に,辺を自然順で考える |
| "MaximalIndependentEdgeSetHeadyEdge" |
| マッチングの際に,辺の重みの大きい(例:もとのグラフで多数の辺を表す辺)ものを優先する |
| "MaximalIndependentEdgeSetSmallestVertexWeight" |
| 頂点の重みが最小の隣接頂点とのマッチングを優先する |
"StepControl"
オプション
"StepControl"エネルギー最小化の過程でステップ長をどのように修正するかを定義する.可能な値は
Automatic (デフォルト),
"Monotonic" ステップ長を短くすることしかできない),
"NonMonotonic" (ステップ長は長くも短くもできる),
"StrictlyMonotonic" (反復の間にステップ長が厳密に縮められる)のいずれかである.
"StepLength"
オプション
"StepLength"は,頂点を動かす際の初期ステップ長を与える.可能な値は
Automatic(デフォルト)か,あるいは正の実数である.
Tolerance
オプション
Toleranceは,エネルギー最小化の過程を終了する際に使用する許容度を指定する.各頂点の座標変化の平均が許容度よりも小さい場合はエネルギー最小化が終了され,現行座標が出力として返される.取り得る値は
Automaticか正の実数である.
"SpringElectricalEmbedding"メソッドのメソッドサブオプション
| | |
| "Octree" | Automatic | 反発力の計算にOCTREEデータ構造(3 Dの場合) あるいはQUADTREE構造 (2 Dの場合) を使うかどうか |
| "RepulsiveForcePower" | -1 | 距離によって反発力がどれほどの速度で小さくなるか |
"SpringElectricalEmbedding"のメソッドオプション
"Octree"
"Octree"オプションは,OCTREEデータ構造(3Dで)またはQUADTREEデータ構造(2Dで)を反発力の計算に使うかどうかを指定する.可能な設定値は
Automatic(デフォルト),
True,
Falseである.OCTREEデータ構造を使うと,長距離の反発力を近似することで計算が複雑になるのを最低限に抑えることができる.然し,力の計算に近似が導入されるため,結果が思わしくない場合もある.
"RepulsiveForcePower"
可能な設定値は負の実数でデフォルトは-1である.バネ電気埋込みでは,頂点
i j 間の反発力は,デフォルトで
K2/dij である.
RepulsiveForcePowerの値が
r (
r<0)であれば,反発力は
K1-rdijrと定義できる.ここで
dij は頂点間の距離,
K は定数係数である.
長い距離に渡る強く長い範囲の反発力は,周辺部の頂点の間隔が中心近くのそれよりも狭まるという境界効果を及ぼすことがよくある.弱く長い範囲の反発力を指定することで,この効果を弱められることがある.このオプションは,グラフがより多くのスペースを占めるよう描画する場合に便利である(詳細は
"InferentialDistance"メソッドオプションを参照のこと).
反発力-2では,境界の頂点はデフォルト値の-1のときほど近付いていない.
| Out[63]= |  |
| Out[64]= |  |
|
"HighDimensionalEmbedding"のメソッドサブオプション
| | |
| "RefinementMethod" | None | 結果をさらに精緻化するかどうか,するのであればどのメソッドを使うかを指定する |
"HighDimensionalEmbedding"のメソッドオプション
"RefinementMethod"
オプション
"RefinementMethod"は結果をさらに精緻化するかどうか,するのであればどのメソッドを使うのかを指定する.可能な値は
None(デフォルト),
"SpringEmbedding"あるいは
"SpringElectricalEmbedding"である.
"HighDimensionalEmbedding"メソッドが頂点5と6を同じ位置に置いた場合である. "RefinementMethod"オプションを指定すると,よりよいグラフが描画できる.
| Out[66]= |  |
| Out[67]= |  |
|
より高度なトピック
より空間を占めるグラフを描画する
GraphPlotのデフォルト設定は一般にうまく動作するが,頂点次数に広範な値を持つグラフでは頂点が閉めるスペースを小さくできるような設定を使うことが必要になる場合がある.
| Out[19]= |  |
| Out[20]= |  |
|
しかし, "SpringEmbedding"が,より空間を占める描画をすることもある.
| Out[21]= |  |
|
反発力が距離に沿ってより速く減衰するようにデフォルト( -1)より小さい反発力を使っても同様の効果が得られることがある.
| Out[23]= |  |
|
| Out[24]= |  |
|
このような木に似たグラフの場合は,木を描画するアルゴリズムが適しているだろう.木のレイアウトをうまく制御するには, 「木の描画」を参照するとよい.
| Out[25]= |  |
|
| Out[23]= |  |
|
非常に大きなグラフの描画をよりよくする
デフォルト設定でも非常によいパフォーマンスが得られるが,特定のタスクに対して特別なオプションの組合せを選ぶことで,さらに描画スピードを上げたり,メモリ使用量を減らしたりすることができる.例えば,スピードおよび/またはメモリ使用量は,少ない反復回数,小さい推定距離,低い許容誤差を使うと向上する.これらの設定は質を下げる傾向があるが,それでも妥協できる範囲のものである.
| Out[76]= |  |
|
粗くする方法の枠組みに基づいた最大独立頂点集合は,より高速であることが多く,また,メモリ消費量も少なくレイアウトの品質もよい.
| Out[77]= |  |
|
反復回数を30に減らすと,結果はより速く得られる.
| Out[78]= |  |
|
推定距離2,反復回数40という組合せもデフォルトより速い.
| Out[79]= |  |
|
さらに反復回数を20に減らすと,はるかに速くなる.
| Out[80]= |  |
|
| Out[81]= |  |
|
"HighDimensionalEmbedding"は最速のメソッドであることが多いが,画質は劣ることが多い.
| Out[82]= |  |
|
比較してみる. "SpringEmbedding"は最も遅いメソッドであるが,直交する線を使ったメッシュが描ける唯一のメソッドである.
| Out[83]= |  |
|
出力から頂点座標を抽出する
ほとんどの場合,通常の
Graphics式と同様に
GraphPlotおよび
GraphPlot3Dの出力を扱うことになる.然し,出力式に潜んでいる追加情報を利用した方がよい場合もある.これは
Graphics[Annotation[data, VertexCoordinateRules->rules]]という形式である.これはグラフの頂点座標を抽出する際に特に便利である.
| Out[84]= |  |
|
| Out[85]= |  |
|
例題ギャラリー
大腸菌転写ネットワーク
セル内の遺伝子式を制御する転写規則ネットワークのグラフ表現において,ノード(頂点)はオペロンであり,同じmRNAに転写された1つ以上の遺伝子である.グラフの辺は,転写因子をエンコードするオペロンから,それが直接支配するオペロンへと向いている[1].
データ
これは規則として記述されたネットワーク[2]である.
ネットワークの描画
ネットワークは多数の要素から構成される.マウスを頂点上に置くと,ラベルが見られる.
| Out[87]= |  |
|
| Out[88]= |  |
|
| Out[89]= |  |
|
| Out[90]= |  |
|
プロテイン:オキシドレダクターゼ
データ形式[4]を使ってオキシドレダクターゼプロテイン[3]をプロットする.
| Out[91]= |  |
|
正方誘電体導波管
正方疎行列はグラフの隣接行列と見ることができるので,
GraphPlotを使って疎行列を描画すると役に立つことがよくある.以下に例を挙げる.1000以上の行列のグラフ描画は[7]にある.
このグラフは電気工学で使われる疎行列を表す[5].
| Out[115]= |  |
| Out[116]= |  |
|
ソーシャルネットワーク
グラフの描画は,社会構造を可視化するパワフルなツールである.
| Out[94]= |  |
|
語やテキストからのグラフ
次は,すべて「din」で始まる語のネットワークである.各語に2つの最も近くにある語があり,それぞれが該当語と辺で結ばれている.
| Out[97]= |  |
|
単語の中のそれぞれの文字と,同じ単語のその文字の次の文字とをつないだグラフを生成する.
| Out[2]= |  |
|
| Out[101]= |  |
|
トーラス
| Out[103]= |  |
|
参考文献
[1] Milo R., S. Shen-Orr, S. Itzkovitz, N. Kashtan, D. Chklovskii, and U. Alon. "Network Motifs: Simple Building Blocks of Complex Networks" Science 298, no. 5594 (2002): 824-827.
[2] http://www.weizmann.ac.il/mcb/UriAlon/groupNetworksData.html
[3] Milo R., S. Itzkovitz, N. Kashtan, et al. "Superfamilies of Designed and Evolved Networks" Science 303, no. 5663 (2004): 1538-42.
[4] http://www.weizmann.ac.il/mcb/UriAlon/Papers/networkMotifs/1AORInter_st.txt
[5] http://math.nist.gov/MatrixMarket/data/NEP/dwave/dwa512.html
[6] Freivalds K., U. Dogrusoz, and P. Kikusts, "Disconnected Graph Layout and the Polyomino Packing Approach" Lecture Notes in Computer Science: Revised Papers from the 9th International Symposium on Graph Drawing 2265 (2001): 378-391.
[7] Hu Y. F. "Graph Drawing of Square Matrices from University of Florida Sparse Matrix Collection" (2007) http://members.wolfram.com/~yifanhu/UFMatrixGraphPlot/.
[8] Hu Y. F. "Efficient, High-Quality Force-Directed Graph Drawing" The Mathematica Journal 10, no. 1 (2006): 37-71.