Puede hacer algo como esto 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, #]} &)]
Método versión de febrero de el año 2015
Para preservar la capacidad de reorganizar de forma interactiva el gráfico con las herramientas de dibujo (doble clic) uno debe mantener los gráficos de vértices en el interior de GraphicsComplex
, con índices en lugar de coordenadas. Creo que uno podría hacer esto desde VertexRenderingFunction
usando una variable de incremento, pero parece más fácil y posiblemente más robusto hacerlo con el postprocesamiento. Esto funciona en las versiones 7 y 10 del Mathematica, presumiblemente, 8 y 9, así:
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]}
No hay ninguna razón por la que no se puede utilizar para dibujar primitivas gráficas algo como esto. ¿Está solicitando una solución de diseño automático? –
@ Mr.Wizard Sí, estoy buscando primitivas de mayor nivel para dibujar diagramas de estado complicados. No sé si Mathematica lo proporciona. Busqué en la documentación y revisé las opciones de la función "GraphPlot" y terminé con el código anterior. – Ning
¿Por qué aceptó mi respuesta? La forma sigue mal. Te lo agradezco, pero creo que deberías esperar una mejor respuesta. –