Puoi fare qualcosa di simile usando 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, #]} &)]
metodo aggiornato febbraio 2015
Per preservare la capacità di riorganizzare in modo interattivo il grafico con gli strumenti di disegno (doppio clic) si deve tenere la grafica di vertice all'interno di GraphicsComplex
, con indici anziché coordinate. Credo che si possa fare questo da VertexRenderingFunction
usando una variabile incrementale, ma sembra più facile possibilmente più robusto farlo con la post-elaborazione. Questo funziona nelle versioni 7 e 10 del Mathematica, presumibilmente 8 e 9 così:
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]}
Non v'è alcuna ragione per cui non è possibile utilizzare primitive grafiche per disegnare qualcosa di simile. Stai richiedendo una soluzione di layout automatico? –
@ Mr.Wizard Sì, sto cercando alcune primitive di livello superiore per disegnare diagrammi di stato complicati. Non so se Mathematica lo fornisce. Ho cercato nella documentazione e controllato le opzioni della funzione "GraphPlot" e ho finito con il codice sopra. – Ning
Perché hai accettato la mia risposta? La forma è ancora sbagliata. Lo apprezzo, ma penso che dovresti aspettare una risposta migliore. –