Aquí hay dos enfoques básicos para alterar los gráficos en las MMA 8.0. El primero se basa en HighlightGraph
y en particular en GraphHighlightStyle -> "DehighlightHide"
. El segundo enfoque usa los VertexCoordinates de un gráfico en futuras variantes de ese gráfico.
Discutiremos la eliminación por separado de la suma porque implican métodos ligeramente diferentes.
[P.S. : Hice varias ediciones a mi respuesta para que sea más claro]
En primer lugar algunos datos:.
edges={1\[UndirectedEdge]8,1\[UndirectedEdge]11,1\[UndirectedEdge]18,1\[UndirectedEdge]19,1\[UndirectedEdge]21,1\[UndirectedEdge]25,1\[UndirectedEdge]26,1\[UndirectedEdge]34,1\[UndirectedEdge]37,1\[UndirectedEdge]38,4\[UndirectedEdge]11,4\[UndirectedEdge]12,4\[UndirectedEdge]26,4\[UndirectedEdge]27,4\[UndirectedEdge]47,4\[UndirectedEdge]56,4\[UndirectedEdge]57,4\[UndirectedEdge]96,4\[UndirectedEdge]117,5\[UndirectedEdge]11,5\[UndirectedEdge]18,7\[UndirectedEdge]21,7\[UndirectedEdge]25,7\[UndirectedEdge]34,7\[UndirectedEdge]55,7\[UndirectedEdge]76,8\[UndirectedEdge]11,26\[UndirectedEdge]29,26\[UndirectedEdge]49,26\[UndirectedEdge]52,26\[UndirectedEdge]111,27\[UndirectedEdge]28,27\[UndirectedEdge]51,42\[UndirectedEdge]47,49\[UndirectedEdge]97,51\[UndirectedEdge]96}
Aquí está la gráfica inicial:
g = Graph[edges, VertexLabels -> "Name", ImagePadding -> 10,
ImageSize -> 500]
" Borrando "un borde del gráfico sin cambiar la apariencia general del gráfico".
Comencemos por quitar el borde (4,11) ubicado en el centro del gráfico. remainingEdgesAndVertices
contiene todos los vértices y los bordes iniciales a excepción del borde (4,11).
remainingEdgesAndVertices =
Join[VertexList[g], Complement[EdgeList[g], {4 \[UndirectedEdge] 11}]]
Vamos a "borrar" (es decir, ocultar) del borde (4,11): borde
HighlightGraph[g, remainingEdgesAndVertices, VertexLabels -> "Name",
ImagePadding -> 10, GraphHighlightStyle -> "DehighlightHide",
ImageSize -> 500]
Si hubiéramos hecho eliminado (4, 11) el gráfico tendría cambió radicalmente su apariencia.
Graph[Complement[edges, {4 \[UndirectedEdge] 11}],
VertexLabels -> "Name", ImagePadding -> 10, ImageSize -> 500]
"Adición de" un borde gráfico sin cambiar el aspecto general del gráfico.
Agregar un borde de gráfico es un poco más desafiante. Hay dos maneras en que vienen a la mente. El método utilizado aquí funciona al revés. Incluyes el nuevo borde primero en forma oculta y luego lo destapas más tarde. El gráfico inicial con el borde oculto "por añadir" estará en un diseño similar al del gráfico con el borde "nuevo". La razón es esta: de hecho son el mismo gráfico: sin embargo, muestran diferentes números de bordes.
g2 = Graph[Append[edges, 42 \[UndirectedEdge] 37],
VertexLabels -> "Name", ImagePadding -> 10, ImageSize -> 500]
HighlightGraph[g2,
Join[Complement[EdgeList[g2], {42 \[UndirectedEdge] 37}],
VertexList[g2]], VertexLabels -> "Name", ImagePadding -> 10,
GraphHighlightStyle -> "DehighlightHide"]
ahora muestran el gráfico con el "nuevo borde" añadió.
Esto se ve muy diferente de la figura 1. Sin embargo, parece ser una extensión natural de la Fig. 4.
La adición de nuevos vértices y aristas sobre la marcha
Hay otro forma de agregar bordes (y vértices) mientras se mantiene la apariencia general. Fue inspirado por algo que Sjoerd escribió en su respuesta.
Vamos a reservar el punto {0,0} para un futuro vértice 99. Simplemente añadir que apuntan a la VertexCoordinates
de G2:
vc = VertexCoordinates ->
Append[AbsoluteOptions[g2, VertexCoordinates][[2]], {0, 0}]
Ahora vamos a ver lo que parece. g3 es solo g2 con el vértice adicional (999) y el borde (4,99).
g3 = Graph[Append[EdgeList [g2], 4 \[UndirectedEdge] 999], vc,
VertexLabels -> "Name", ImagePadding -> 10,
GraphHighlightStyle -> "DehighlightHide", ImageSize -> 500]
Este procedimiento nos permite añadir nuevas aristas y vértices a medida que avanzamos. Pero se necesitarán algunas pruebas y errores para garantizar que los nuevos vértices estén ubicados en una posición adecuada.
Agregar solo otro borde (sin un nuevo vértice) es mucho más fácil: simplemente agregue el nuevo borde y use el VertexCoordinates
del gráfico anterior.
Debería poder eliminar bordes de un gráfico usando el mismo enfoque (usando el mismo VertexCoordinates
).
Si el problema es la otra manera, es decir, la eliminación de algunos vértices y gráficos a partir de un gráfico y Cambie mínimamente el diseño del gráfico, entonces lo que se puede hacer es mostrar esos vértices y bordes en un color transparente, pero en realidad no los elimina. –
@Computist Sí, eso es esencialmente lo que hace "DehighlightHide". – DavidC