Mathematicaを使って古典的な状態図を描くには?

MathematicaがGraphvizによって作成されたようなものを描画することは可能で実用的ですか?

enter image description here

これは私が得ることができる最高です(しかし、形とスタイルは満足です):

enter image description here

コード:

GraphPlot[{{A -> C, "go"}, {C -> B, "gone"}, {C -> D, 
   "went"}, {C -> C, "loop"}}, VertexLabeling -> True, 
 DirectedEdges -> True]
ベストアンサー

VertexRenderingFunction
を使用して、このようなことを行うことができます。

GraphPlot[{{A -> C, "go"}, {C -> B, "gone"}, {C -> D, "went"}, {C -> C, "loop"}}, 
 DirectedEdges -> True, 
 VertexRenderingFunction -> ({{White, Disk[#, 0.15]}, 
     AbsoluteThickness[2], Circle[#, 0.15], 
     If[MatchQ[#2, A | B], Circle[#, 0.12], {}], Text[#2, #]} &)]

enter image description here


2015年2月に更新されたメソッド

描画ツールでグラフをインタラクティブに再配置する機能(ダブルクリック)を維持するには、
GraphicsComplex
の内部に頂点グラフィックスを座標ではなくインデックスで保持する必要があります。私はインクリメント変数を使って
VertexRenderingFunction
からこれを行うことができると信じていますが、後処理でそれを行う方が簡単かもしれません。これは Mathematica
のバージョン7と10、おそらく8と9で動作します:

GraphPlot[
  {{A -> C, "go"}, {C -> B, "gone"}, {C -> D, "went"}, {C -> C, "loop"}},
  DirectedEdges -> True
] /.
 Tooltip[Point[n_Integer], label_] :>
   {{White, Disk[n, 0.15]},
    Black, AbsoluteThickness[2], Circle[n, 0.15], 
    If[MatchQ[label, A | B], Circle[n, 0.12], {}], Text[label, n]}

enter image description here

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です