MathematicaがGraphvizによって作成されたようなものを描画することは可能で実用的ですか?
これは私が得ることができる最高です(しかし、形とスタイルは満足です):
コード:
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, #]} &)]
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]}